Змінна для імені елемента


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 тощо?
wtjones

Відповіді:


2

Будь-який параметр, який потребує змінного списку або масиву, ймовірно, є хорошим кандидатом для визначеного користувачем типу таблиці. Я створив би такий тип:

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

Типи таблиць можуть використовуватися як параметри для збережених процедур, як і будь-який інший тип. Потім ви можете або приєднатись до визначеної користувачем таблиці, або ітератувати рядки для динамічної побудови запиту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.