Ken*_*Lam 3 xml sql-server-2008
XML我的表中有一个列,其结构如下
<md xmlns="http://www.intellipayment.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<dist>
<ml>
<S>368.72</S>
<src>26249201</src>
<t>26249202</t>
</ml>
<ml>
....
</ml>
</dist>
</md>
Run Code Online (Sandbox Code Playgroud)
我想选择所有src并一一执行操作。
所以我的SQL语句是:
while @i <= @xmlCount
begin
select
@CurrentSrc = AssignmentDistribution.value('(/*:md/*:dist/*:ml/*:src/text())[sql:variable("@i")]', 'varchar(50)')
from
table
where
id = 1234
set @i = @i + 1
end
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
XQuery [autodeals.AssignmentDistribution.value()]:“value()”需要单例(或空序列),找到“xdt:untypedAtomic *”类型的操作数
但是,如果我用静态数字 1、2、3、4 ..... 替换 SQL 变量,它将正确显示结果。
有人可以告诉我我做错了什么吗?
谢谢
这可能是因为sql:variable()return xdt:anyAtomicType,我不确定。但这是一种可能的替代方案,通过使用query()第一个,它不限制仅返回单例,然后将返回值转换为varchar(50)使用value()函数:
select @CurrentSrc = AssignmentDistribution
.query('(/*:md/*:dist/*:ml/*:src/text())[sql:variable("@i")]')
.value('.', 'varchar(50)')
FROM table where id = 1234
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |