我正在使用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,
“消息转换时,消息245,级别16,状态1,行1转换失败 varchar值'NULL'到数据类型int。“
答案 0 :(得分:0)
您可以在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)
如果您想在字符节点中获取NULL
字符串值'NULL'
,可以对isnull
的结果使用value()
。
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)