Variável para o nome do elemento

9

Eu tenho esse código tSQL que funciona bem:

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)

No entanto, o que eu quero ser capaz de passar é uma lista dinâmica de muitos pares de valores que são OR entre cada um, ou seja,

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)

Existe alguma forma de fazer isso?

Ross Buggins
fonte
11
Para garantir que eu entenda, também pode haver @ c e @ d etc?
Wtjones # 4/12

Respostas:

2

Qualquer parâmetro que precise de uma lista ou matriz de variáveis ​​provavelmente é um bom candidato para um tipo de tabela definido pelo usuário. Eu criaria o tipo como:

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

Os tipos de tabela podem ser usados ​​como parâmetros para procedimentos armazenados, como qualquer outro tipo. Você pode ingressar na tabela definida pelo usuário ou iterar as linhas para criar dinamicamente a consulta.

dartonw
fonte