gpt4 book ai didi

sql-server-2008 - 将 SQL 变量指定给 xquery exit 方法来检查值是否在给定的值集中

转载 作者:行者123 更新时间:2023-12-02 21:52:41 24 4
gpt4 key购买 nike

我正在尝试查询 XML 列以返回属性位于可能值列表中的所有行。

XQuery 允许类似的事情

SELECT COUNT(*) 
FROM table
WHERE xml_col.exist('//Field.[@name=("value1","value2","value3")]') = 1

这将返回具有属性@name设置为“value1”、“value2”或“value3”的字段的记录数。

我想做的是编写一个简洁的查询,可以处理集合“value1”,“value2”,“value3”作为输入参数,例如

DECLARE @list NVARCHAR(100)

SET @list = '("value1","value2","value3")'

SELECT COUNT(*)
FROM table
WHERE xml_col.exist('//Field.[@name=sql:variable("@list")]') = 1

这当然是无效的。任何建议将不胜感激!

最佳答案

最简单的方法是(如果您的名字不能包含 ,):

declare @list nvarchar(max) = ',value1,value2,value3,'

select count(*)
from test
where xml_col.exist('//Field[contains(sql:variable("@list"), concat(",", @name, ","))]') = 1;

或者SQL方式:

select count(*) 
from test
where
exists
(
select 1 from xml_col.nodes('//Field') as T(C)
where T.C.value('@name', 'nvarchar(max)') in ('value1', 'value2', 'value3')
)

sql fiddle demo

关于sql-server-2008 - 将 SQL 变量指定给 xquery exit 方法来检查值是否在给定的值集中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18282192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com