Variable pour le nom de l'élément


9

J'ai ce code tSQL qui fonctionne bien:

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)

Cependant, ce que je veux pouvoir faire, c'est passer dans une liste dynamique de plusieurs paires de valeurs qui sont OU entre chacune, c'est-à-dire

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)

Y-a-t'il une façon de le faire?


1
Pour être sûr de bien comprendre, il pourrait également y avoir @c et @d, etc.?
wtjones

Réponses:


2

Tout paramètre nécessitant une liste ou un tableau de variables est probablement un bon candidat pour un type de table défini par l'utilisateur. Je créerais le type comme:

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

Les types de table peuvent être utilisés comme paramètres de procédures stockées comme tout autre type. Vous pouvez ensuite soit vous joindre à la table définie par l'utilisateur, soit itérer les lignes pour créer dynamiquement la requête.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.