Zmienna dla nazwy elementu

9

Mam ten kod tSQL, który działa OK:

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)

Chciałbym jednak przekazać dynamiczną listę wielu par wartości, które są OR między nimi, tj.

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)

Czy jest na to sposób?

Ross Buggins
źródło
1
Aby upewnić się, że rozumiem, mogą istnieć również @c i @d itp.?
wtjones

Odpowiedzi:

2

Każdy parametr, który potrzebuje listy zmiennych lub tablicy, jest prawdopodobnie dobrym kandydatem do tabeli zdefiniowanej przez użytkownika. Chciałbym utworzyć typ jako:

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

Typy tabel mogą być używane jako parametry procedur przechowywanych, tak jak każdy inny typ. Następnie możesz albo dołączyć do tabeli zdefiniowanej przez użytkownika, albo iterować wiersze, aby dynamicznie zbudować zapytanie.

dartonw
źródło