如何從 SQL Server 中包含 XML 的列中獲取值?下面是我的示例 XML 列值,id 可以隨時交換(101,100)或(201,100,101,321)。
<Questions>
<item id="101">Yes</item>
<item id="100">No</item>
</Questions>
我想根據 Id 獲取一個值。就像Yes從id=101. 示例代碼非常感謝。
我嘗試使用以下示例,但無法檢索值“是”
select Y.value('@item[1]','varchar[3]') as valT from tbl_storeXML s cross apply s.Questions.nodes('Questions/item') as X(Y) where e.empId=256 and Y.value('@id','int')=101
請幫助解決這個問題。附言。這不是家庭作業,我正在學習在 sql server 中處理 xml。
uj5u.com熱心網友回復:
使用value不正確,你這樣做:
Y.value('@id','int')
這應該是:Y.value('(@id)[1]','int')
- 圓括號
@id,請參閱:docs: value() 方法
和Y.value('item[1]','varchar[3]')。
這應該是:Y.value('(@item)[1]','varchar(3)')。
被
@洗掉,因為item它不是一個屬性varchar應該有圓括號,而不是方括號。
您的try,更改后將變為:
select
Y.value('(item)[1]','varchar(3)') as valT
from tbl_storeXML s
cross apply s.Questions.nodes('Questions/item') as X(Y)
where e.empId=256 and Y.value('(@id)','int')=101
這沒有經過測驗,因為我沒有那些表。(我確實認為Y.value('(item)[1]','varchar(3)')可能需要寫成Y.value('(.)[1]','varchar(3)'))
但是在這個DBFIDDLE中可以看到相同的方法
DECLARE @xml XML = '<Questions>
<item id="101">Yes</item>
<item id="100">No</item>
</Questions>';
select
X.y.value('(@id)[1]','VARCHAR(20)') id,
X.y.value('(.)[1]','VARCHAR(20)') value
from @xml.nodes('Questions/item') as X(y);
輸出:
| ID | 價值 |
|---|---|
| 101 | 是的 |
| 100 | 不 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/458873.html
下一篇:按日期范圍內的周分組
