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?


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.