我是使用SQL的XML初學者。如何在插入語句中指定索引,如下所示。下面的語句給出拋出異常與更新無效路徑。如何使用SQL DML動態更改索引值
set @xmldata.modify('insert <Test>Test1</Test> after (/xyz/abc)[sql:variable("@index")]')
sql:variable() Function (XQuery)有一些例子,但是,這並不談論更改索引,但語句的其他部分。
我是使用SQL的XML初學者。如何在插入語句中指定索引,如下所示。下面的語句給出拋出異常與更新無效路徑。如何使用SQL DML動態更改索引值
set @xmldata.modify('insert <Test>Test1</Test> after (/xyz/abc)[sql:variable("@index")]')
sql:variable() Function (XQuery)有一些例子,但是,這並不談論更改索引,但語句的其他部分。
您是否看過這篇文章。 http://technet.microsoft.com/en-us/library/ms175466.aspx
SELECT @myDoc
set @myDoc.modify('
insert <BikeFrame>Strong long lasting</BikeFrame>
after (/Root/ProductDescription/Features/Material)[1]
')
SELECT @myDoc;
這假定Material標籤存在。路徑(/ xyz/abc)是否有效?
<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>
此外,用文字而不是sql:variable測試當前代碼。
請再次發佈xml/code。
感謝
約翰
嘿約翰,非常感謝您的回覆。我沒有檢查代碼沒有sql:變量工作正常。我們來考慮一下你的例子。 '(/ Root/ProductDescription/Features/Material)[1]'我該如何替換'[1]'? – sarat
表達式2中insert (XML DML)必須返回單個節點。該檢查是在第一次分析查詢時完成的,然後SQL Server可以不評估您正在使用的謂詞,以確定表達式是否將始終返回單個節點。但是,如果您在括號中指定了文字值,則SQL Server知道只有一行將被返回。
要解決您的問題,您需要在表達式末尾添加[1]
。
set @xmldata.modify('insert <Test>Test1</Test>
after (/xyz/abc[sql:variable("@index")])[1]')
這會給你點你想
/xyz/abc[sql:variable("@index")]
,這將告訴大家,表達保證返回一個節點的SQL Server。
(/xyz/abc[sql:variable("@index")])[1]
請張貼實際的代碼,表和一些示例數據。這將有助於... –