Variable para el nombre del elemento

9

Tengo este código tSQL que funciona 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)

Sin embargo, lo que quiero poder hacer es pasar una lista dinámica de muchos pares de valores que son OR entre cada uno, es decir

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)

¿Hay alguna forma de hacer esto?

Ross Buggins
fuente
1
Para asegurarme de que entiendo, ¿también podría haber @c y @d, etc.?
wtjones

Respuestas:

2

Cualquier parámetro que necesite una lista o matriz de variables es probablemente un buen candidato para un tipo de tabla definida por el usuario. Crearía el tipo como:

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

Los tipos de tabla se pueden usar como parámetros para procedimientos almacenados como cualquier otro tipo. Luego puede unirse en la tabla definida por el usuario o iterar las filas para generar dinámicamente la consulta.

dartonw
fuente