Variabel untuk nama elemen

9

Saya punya kode tSQL ini yang berfungsi OK:

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)

Namun, apa yang ingin saya lakukan adalah memasukkan daftar dinamis dari banyak pasangan nilai yang OR antara masing-masing, yaitu

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)

Apakah ada cara untuk melakukan ini?

Ross Buggins
sumber
1
Untuk memastikan saya mengerti, mungkin juga ada @c dan @d dll?
wtjones

Jawaban:

2

Parameter apa pun yang memerlukan daftar variabel atau array mungkin merupakan kandidat yang baik untuk jenis tabel yang ditentukan pengguna. Saya akan membuat tipe sebagai:

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

Jenis tabel dapat digunakan sebagai parameter untuk prosedur tersimpan seperti jenis lainnya. Anda kemudian bisa bergabung di tabel yang ditentukan pengguna atau iterate baris untuk secara dinamis membangun kueri.

dartonw
sumber