我想将Id
(While Counter)附加到我的XML查询中,如您所见:
declare @id int
declare @rejectpart xml
set @id=0
while (@id <12)
begin
select @rejectpart.value('(/Rejectedparameters/parameter/name)[sql:variable("@id")]', 'varchar(max)')
begin
select 0
end
set @id=@id+1
end
但是当我想运行我的查询时会收到此错误:
XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'
我的输入XML:
<Rejectedparameters>
<parameter>
<name>CO</name>
<value>8.72</value>
</parameter>
<parameter>
<name>CO2</name>
<value>6.49</value>
</parameter>
<parameter>
<name>HC</name>
<value>659</value>
</parameter>
<parameter>
<name>O2</name>
<value>1.5</value>
</parameter>
<parameter>
<name>BackRightBrake</name>
<value>1.35</value>
</parameter>
<parameter>
<name>BackLeftBrake</name>
<value>0.63</value>
</parameter>
<parameter>
<name>BackBrake</name>
<value>53.33</value>
</parameter>
<parameter>
<name>CarBody</name>
<value>0</value>
</parameter>
<parameter>
<name>SoundStandard</name>
<value>0</value>
</parameter>
<parameter>
<name>NoSmoke</name>
<value>0</value>
</parameter>
</Rejectedparameters>
答案 0 :(得分:2)
<强>溶液(approach1)强>:
我想这就是你的解决方案应该如何:
select @rejectpart.value('(/Rejectedparameters/parameter/name/@id)[1]', 'varchar(max)')
<强> approach2 强>
虽然我在寻找解决方案,但你期待这样的事吗?运行。这样我就可以更好地了解您的问题。
declare @xmldata xml;
set @xmldata =
'<Rejectedparameters>
<parameter>
<name>CO</name>
<value>8.72</value>
</parameter>
<parameter>
<name>CO2</name>
<value>6.49</value>
</parameter>
<parameter>
<name>HC</name>
<value>659</value>
</parameter>
<parameter>
<name>O2</name>
<value>1.5</value>
</parameter>
<parameter>
<name>BackRightBrake</name>
<value>1.35</value>
</parameter>
<parameter>
<name>BackLeftBrake</name>
<value>0.63</value>
</parameter>
<parameter>
<name>BackBrake</name>
<value>53.33</value>
</parameter>
<parameter>
<name>CarBody</name>
<value>0</value>
</parameter>
<parameter>
<name>SoundStandard</name>
<value>0</value>
</parameter>
<parameter>
<name>NoSmoke</name>
<value>0</value>
</parameter>
</Rejectedparameters>'
select
pd.value('name[1]','char(11)'),
pd.value('value[1]','char(11)')
from @xmlData.nodes('//Rejectedparameters/parameter') as i(pd);
答案 1 :(得分:2)
SQL Server无法确定您的XQuery是否返回单例。您可以将整个表达式包装在(...)[1]
中以修复它,因此XQuery变为如下所示:
((/Rejectedparameters/parameter/name)[sql:variable("@id")])[1]
但是嵌套的括号令人困惑,在parameter
上设置位置谓词会使它看起来更清晰:
(/Rejectedparameters/parameter[sql:variable("@id")]/name)[1]