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?
Jawaban:
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:
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.
sumber