May*_*ayo 5 xml insert sql-server-2008
我有一个存储过程,该过程使用XML参数并将“实体”节点作为记录插入表中。除非其中一个数字字段在XML中的值为空字符串,否则这将正常工作。然后,它将引发“将数据类型nvarchar转换为数字时出错”错误。
有没有一种方法可以告诉SQL将下面代码中的这些数字字段的空字符串转换为null?
-- @importData XML <- stored procedure param
DECLARE @l_index INT
EXECUTE sp_xml_preparedocument @l_index OUTPUT, @importData
INSERT INTO dbo.myTable
(
[field1]
,[field2]
,[field3]
)
SELECT
[field1]
,[field2]
,[field3]
FROM OPENXML(@l_index, 'Entities/Entity', 1)
WITH
(
field1 int 'field1'
,field2 varchar(40) 'field2'
,field3 decimal(15, 2) 'field3'
)
EXECUTE sp_xml_removedocument @l_index
Run Code Online (Sandbox Code Playgroud)
编辑:并且如果有帮助,示例XML。除非我在上面的代码中注释掉field3或在下面的field3中提供一个值,否则将引发错误。
<?xml version="1.0" encoding="utf-16"?>
<Entities>
<Entity>
<field1>2435</field1>
<field2>843257-3242</field2>
<field3 />
</Entity>
</Entities>
Run Code Online (Sandbox Code Playgroud)
如果您要使用 SQL Server XQuery,您可以执行以下操作:
SELECT
nodes.entity.value('(field1)[1]', 'int') 'Field1',
nodes.entity.value('(field2)[1]', 'varchar(50)') 'Field 2',
CAST(ISNULL(nodes.entity.value('(field3)[1]', 'varchar(50)'), '0.00')
AS DECIMAL(15,2)) 'Field 3'
FROM
@importData.nodes('/Entities/Entity') AS nodes(entity)
Run Code Online (Sandbox Code Playgroud)
基本上,将 的值转换field3
为字符串,如果它为 NULL,则使用 0.00 作为 DECIMAL 值。
我不知道是否有任何方法OPENXML
可以做类似的事情......
归档时间: |
|
查看次数: |
10324 次 |
最近记录: |