如何使用SQL DML动态更改索引值
我是XML和SQL的初学者。如何在insert语句中指定索引,如下所示。下面的语句给出了具有无效更新路径的抛出异常如何使用SQL DML动态更改索引值,sql,sql-server,xml,dml,Sql,Sql Server,Xml,Dml,我是XML和SQL的初学者。如何在insert语句中指定索引,如下所示。下面的语句给出了具有无效更新路径的抛出异常 set @xmldata.modify('insert <Test>Test1</Test> after (/xyz/abc)[sql:variable("@index")]') set@xmldata.modify((/xyz/abc)[sql:variable(@index”)]之后插入Test1) 有一些示例,但这并不是说要更改索引,而是说明语句的
set @xmldata.modify('insert <Test>Test1</Test> after (/xyz/abc)[sql:variable("@index")]')
set@xmldata.modify((/xyz/abc)[sql:variable(@index”)]之后插入Test1)
有一些示例,但这并不是说要更改索引,而是说明语句的其他部分。您是否查看了本文
选择@myDoc
set@myDoc.modify('
插入坚固耐用的
之后(/Root/ProductDescription/Features/Material)[1]
')
选择@myDoc;
这假定存在物料标记。路径(/xyz/abc)有效吗
1年零件和劳动力
可提供3年零件和人工延长维护
铝
坚固耐用
另外,使用文本而不是sql:变量测试当前代码
同样,请发布xml/代码
谢谢
中的John表达式2必须返回单个节点。当查询第一次被解析时,检查就完成了,SQL Server无法计算您正在使用的谓词,以确定表达式是否总是返回单个节点。但是,如果在括号中指定一个文本值,SQL Server知道将只返回一行
要解决问题,需要在表达式末尾添加一个[1]
set@xmldata.modify('insert Test1
在(/xyz/abc[sql:variable(@index”)][1]'之后
这将为您提供所需的节点
/xyz/abc[sql:variable(“@index”)]
这将告诉SQLServer表达式保证返回一个节点
(/xyz/abc[sql:variable(@index”)])[1]
请发布实际代码、表格和一些示例数据。那会有帮助的…嘿,约翰,非常感谢你的回复。我确实检查了没有sql:variable的代码,该代码运行良好。让我们考虑一下你所举的例子。代码>(/Root/ProductDescription/Features/Material)[1]如何从中替换
[1]
?
SELECT @myDoc
set @myDoc.modify('
insert <BikeFrame>Strong long lasting</BikeFrame>
after (/Root/ProductDescription/Features/Material)[1]
')
SELECT @myDoc;
<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
<Warranty>1 year parts and labor</Warranty>
<Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
<Material>Aluminium</Material>
<BikeFrame>Strong long lasting</BikeFrame>
</Features>
</ProductDescription>
</Root>