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?
Respostas:
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:
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.
fonte