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?


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.