Переменная для имени элемента


9

У меня есть этот код TSQL, который работает нормально:

SELECT 
c.logguid,
a.b.value('./PropertyValue', 'varchar(max)') asd
  FROM [dnn].[dbo].[EventLog2] c

cross apply sss.nodes('/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y")]') as a(b)

Тем не менее, я хочу передать динамический список из множества пар значений, которые OR были бы между каждым, т.е.

SELECT 
c.logguid,
a.b.value('./PropertyValue', 'varchar(max)') asd
  FROM [dnn].[dbo].[EventLog2] c

cross apply sss.nodes(
'/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y")
or
PropertyName=sql:variable("@a") and PropertyValue=sql:variable("@b")
]'
) as a(b)

Есть ли способ сделать это?


1
Чтобы убедиться, что я понимаю, также могут быть @c и @d и т. Д.?
мая

Ответы:


2

Любой параметр, которому нужен список переменных или массив, вероятно, является хорошим кандидатом для определяемого пользователем типа таблицы. Я бы создал тип как:

CREATE TYPE [PropertyVariableTableType] AS TABLE (
    PropertyName nvarchar(255),
    PropertyValue nvarchar(255) )

Типы таблиц могут использоваться в качестве параметров хранимых процедур, как и любой другой тип. Затем вы можете либо присоединиться к пользовательской таблице, либо выполнить итерацию строк для динамического построения запроса.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.