Biến cho tên thành phần


9

Tôi có mã tQuery này hoạt động tốt:

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)

Tuy nhiên, điều tôi muốn có thể làm là chuyển vào một danh sách động gồm nhiều cặp giá trị được OR giữa mỗi một giá trị, nghĩa là

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ó cách nào để làm điều này?


1
Để đảm bảo tôi hiểu, cũng có thể có @c và @d vv?
wtjones

Câu trả lời:


2

Bất kỳ tham số nào cần một danh sách hoặc mảng biến có thể là một ứng cử viên tốt cho loại bảng do người dùng định nghĩa. Tôi sẽ tạo kiểu như:

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

Các loại bảng có thể được sử dụng làm tham số cho các thủ tục được lưu trữ giống như bất kỳ loại nào khác. Sau đó, bạn có thể tham gia vào bảng do người dùng xác định hoặc lặp lại các hàng để tự động xây dựng truy vấn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.