如何在 SQL Server 中使用 XML 节点传递 NULL 而不是字符串格式的“NULL”值
Posted
技术标签:
【中文标题】如何在 SQL Server 中使用 XML 节点传递 NULL 而不是字符串格式的“NULL”值【英文标题】:How to pass NULL instead of string format 'NULL' value using XML node in SQL server 【发布时间】:2014-10-30 12:10:30 【问题描述】:我正在使用 XML node() 方法使用 SQLSserver 2008 提取 XML 数据。
现在在提取 XML 数据时,XML 字段的整数数据类型之一具有类似 NULL 的值,它试图以字符串格式插入 'NULL' 而不是 NULL。
下面是用于提取数据的 XML Node() 查询,
CREATE TABLE [dbo].[WO_Log](
[Flag] [int] NULL,
[FillingPO] [nvarchar](50) NULL,
[PackAtCAN1] [bit] NULL
) ON [PRIMARY]
declare @message XML
set @message='<ProductionOrder>
<Header>
<MessageID>00000005</MessageID>
<PublishedDate>2013-05-30 09:30:10</PublishedDate>
</Header>
<Body>
<ProductionOrderDetails>
<Flag>NULL</Flag>
<FillingPO>NULL</FillingPO>
<PackAtCAN1>NULL</PackAtCAN1>
</ProductionOrderDetails>
</Body>
</ProductionOrder>'
INSERT INTO dbo.WO_Log(Flag,FillingPO,PackAtCAN1)
SELECT p.value('Flag[1]','int')
p.value('FillingPO[1]','NVARCHAR(50)'),
p.value('PackAtCAN1[1]','BIT')
FROM @message.nodes('/ProductionOrder/Body/ProductionOrderDetails') x(p)
Now when I'm execute the query i'm getting the error as below,
"Msg 245, Level 16, State 1, Line 1 转换时转换失败 将 varchar 值 'NULL' 转换为数据类型 int。"
【问题讨论】:
【参考方案1】:您可以在 xQuery 中对value()
使用强制转换。如果转换失败,它将返回 NULL。
SELECT p.value('Flag[1] cast as xs:int?','int'),
p.value('FillingPO[1]','NVARCHAR(50)'),
p.value('PackAtCAN1[1] cast as xs:boolean?','BIT')
FROM @message.nodes('/ProductionOrder/Body/ProductionOrderDetails') x(p)
Type Casting Rules in XQuery
如果您想在字符节点中为字符串值'NULL'
获取NULL
,您可以在value()
的结果上使用isnull
。
SELECT p.value('Flag[1] cast as xs:int?','int'),
nullif(p.value('FillingPO[1]','NVARCHAR(50)'), N'NULL'),
p.value('PackAtCAN1[1] cast as xs:boolean?','BIT')
FROM @message.nodes('/ProductionOrder/Body/ProductionOrderDetails') x(p)
【讨论】:
以上是关于如何在 SQL Server 中使用 XML 节点传递 NULL 而不是字符串格式的“NULL”值的主要内容,如果未能解决你的问题,请参考以下文章
sql 使用XQuery方法查询,值,存在,节点在SQL Server中查询XML
Sql Server 中FOR XML PATH(‘‘)函数用法