如何簡單地插入NULL
如果節點爲空或不存在?空XML節點會導致錯誤轉換數據類型爲varchar到數字
CREATE TABLE myxml (
"hours" DECIMAL(11,2)
);
DECLARE @xml XML =
'<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Employee>
<NUMHOURS>0.5</NUMHOURS>
</Employee>
<Employee/>
<Employee>
<NUMHOURS>5</NUMHOURS>
</Employee>
<Employee>
<NUMHOURS/>
</Employee>
</Data>';
INSERT INTO myxml ("hours")
SELECT
t.c.value('NUMHOURS[1]','DECIMAL(11,2)')
FROM @xml.nodes('/Data/Employee') t(c)
空節點<NUMHOURS/>
原因:
誤差變換數據類型爲nvarchar到數字。
我曾嘗試:
NULLIF(t.c.value('NUMHOURS[1]','DECIMAL(11,2)'),'')
但似乎導致同樣的錯誤在事後得到處理。
空節點不被視爲無效,它被認爲是一個空的[B]字符串[/ B]。相反,沒有節點被認爲是空的。在你的情況下,你應該使用'CAST(NULLIF(t.c.value('NUMHOURS [1]','varchar(13)'),'')AS DECIMAL(11,2))''。你可以改變'VARCHAR(13)'更大的東西,以適應爲無效值(不適合'十進制(11,2)') –
或者你可以嘗試'選擇tcvalue('(./文()) 1]」, 'DECIMAL(11,2)')FROM @ xml.nodes( '/數據/員工/ NUMHOURS')T(C)' – JamieD77