ตัวแปรสำหรับชื่อองค์ประกอบ


9

ฉันมีรหัส tSQL นี้ซึ่งใช้งานได้:

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)

อย่างไรก็ตามสิ่งที่ฉันต้องการที่จะสามารถทำได้คือการส่งผ่านรายการแบบไดนามิกของค่าจำนวนมากซึ่งเป็น OR ระหว่างแต่ละค่าเช่น

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)

มีวิธีทำเช่นนี้หรือไม่?


1
เพื่อให้แน่ใจว่าฉันเข้าใจอาจมี @c และ @d etc หรือไม่
wtjones

คำตอบ:


2

พารามิเตอร์ใด ๆ ที่ต้องการรายการตัวแปรหรืออาร์เรย์อาจเป็นตัวเลือกที่ดีสำหรับประเภทตารางที่ผู้ใช้กำหนด ฉันจะสร้างประเภทเป็น:

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

ประเภทตารางสามารถใช้เป็นพารามิเตอร์ในการจัดเก็บเช่นเดียวกับประเภทอื่น ๆ จากนั้นคุณสามารถเข้าร่วมในตารางที่ผู้ใช้กำหนดหรือทำซ้ำแถวเพื่อสร้างแบบสอบถามแบบไดนามิก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.