Variable für den Elementnamen

9

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?

Ross Buggins
quelle
1
Um sicherzugehen, dass ich es verstehe, könnte es auch @c und @d usw. geben?
WTJONS

Antworten:

2

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:

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

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.

Dartonw
quelle