元素名称变量


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)

但是,我想做的是传递一个动态列表,该列表包含在每个值之间进行“或”运算的多对值,即

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等?
wtjones 2012年

Answers:


2

任何需要变量列表或数组的参数都可能是用户定义表类型的理想选择。我将创建类型为:

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

表类型可以像其他任何类型一样用作存储过程的参数。然后,您可以在用户定义的表上联接或迭代行以动态构建查询。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.