我如何简单地插入 NULL
如果节点为空或不存在?
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/>
原因:
Error converting data type nvarchar to numeric.
我试过:
NULLIF(t.c.value('NUMHOURS[1]','DECIMAL(11,2)' ),'')
但这似乎是在导致相同错误的事实发生后才进行处理。
最佳答案
您可以为无效数字提供默认值:
select case
when ISNUMERIC(t.c.value('NUMHOURS[1]', 'nvarchar(100)')) <> 1 then NULL
else t.c.value('NUMHOURS[1]', 'decimal(11,2)')
end
from @xml.nodes('/Data/Employee') t(c)
关于sql - 空 XML 节点导致将数据类型 varchar 转换为数字时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39005094/