我需要在一段時間內在我的xml中獲取子節點的特定值。 我有一個xml與'DangerAlrt'的各種標籤,我需要獲得'標題'和'消息'值,而索引有一個特定的值。使用變量獲取特定的xml子節點SQL
我的意思是。這是我的XML
Declare @myxml xml ='<Shipment>
<InfoAlerts>
<InfoAlert>
<Title>Workflow Instance Id</Title>
<Message>59c541de-b8c6-4e5a-884f-14a68816763c</Message>
</InfoAlert>
</InfoAlerts>
<SuccessAlerts>
<SuccessAlert>
<Title>Schema Validation</Title>
<Message>Ok</Message>
</SuccessAlert>
</SuccessAlerts>
<WarningAlerts />
<DangerAlerts>
<DangerAlert>
<Title>Valid City Name</Title>
<Message>Error</Message>
</DangerAlert>
<DangerAlert>
<Title>Valid something</Title>
<Message>Error2</Message>
</DangerAlert>
</DangerAlerts>
</Shipment>'
如果我需要一個特定的節點:
select @myxml.query('data(//DangerAlert/Message)')
好,但返回我「DangerAlert」內部「消息」的所有值。
現在,我可以返回與「信息」的具體數值:
select @myxml.query('data(//DangerAlert/Message)[1]') -- show me: Error
或
select @myxml.query('data(//DangerAlert/Message)[2]') -- show me: Error2
大!不過,當我有「DangerAlert」我用這句話很多節點在一段時間內
select @myxml.query('data(//DangerAlert/Message)[local-name() = sql:variable("@i")]') -- where 'i' is the variable (converted to string) used to iterate
但不起作用。 retunrs我什麼:( 如何使用SQL變量作爲指標值這個表達式?
爲什麼沒有必要到u數據()?。第二件事,你的解決方案不起作用。因爲我需要值節點而變量@i迭代。然而,改變你的迴應,我得到了我正在尋找的答案:) @ myxml.query('data(// DangerAlert/Title)[sql:variable(「@ i」)]')) – Makito 2014-09-22 16:22:38
@Makito您在評論中提供的查詢不正確;它將返回所有非空SQL變量值的所有'
怎麼....?它不正確?爲什麼?我需要的是價值,而不是節點。儘管你的回答仍然不適合我的回覆。我解釋。 說出我獲得價值的方式並不是最合適和最有效的做法可能是正確的。但....爲什麼不爲我工作?嘗試這個(我在問題中使用相同的XML):declare @k INT SET @k = 2 - 更改K值爲1,2等...許多'DangerAlert'與xml相同 選擇@myxml .query('data(// DangerAlert/Title)[sql:variable(「@ k」)]')as BadThing, \t \t @ myxml.query('// DangerAlert [Title = sql:variable(「@ k 「)]')作爲舒緩你明白我嗎? – Makito 2014-09-22 20:38:15