Variabile per il nome dell'elemento


9

Ho questo codice tSQL che funziona bene:

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)

Tuttavia, ciò che voglio essere in grado di fare è passare in un elenco dinamico di molte coppie di valori che sono OR tra loro, vale a 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)

C'è un modo per farlo?


1
Per essere sicuro di aver capito, potrebbero esserci anche @c, @d ecc?
wtjones,

Risposte:


2

Qualsiasi parametro che richiede un elenco di variabili o un array è probabilmente un buon candidato per un tipo di tabella definito dall'utente. Vorrei creare il tipo come:

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

I tipi di tabella possono essere utilizzati come parametri per le stored procedure proprio come qualsiasi altro tipo. È quindi possibile unire la tabella definita dall'utente o iterare le righe per creare dinamicamente la query.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.