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?
Odpowiedzi:
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:
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.
źródło