Ich habe diesen tSQL-Code, der OK funktioniert:
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)
Ich möchte jedoch in der Lage sein, eine dynamische Liste von vielen Wertepaaren zu übergeben, die zwischen jedem ODER-verknüpft sind, d. H.
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)
Gibt es eine Möglichkeit, dies zu tun?
Antworten:
Jeder Parameter, der eine Variablenliste oder ein Array benötigt, ist wahrscheinlich ein guter Kandidat für einen benutzerdefinierten Tabellentyp. Ich würde den Typ wie folgt erstellen:
Tabellentypen können wie jeder andere Typ als Parameter für gespeicherte Prozeduren verwendet werden. Sie können dann entweder der benutzerdefinierten Tabelle beitreten oder die Zeilen iterieren, um die Abfrage dynamisch zu erstellen.
quelle