如何在sql server中解析xml以处理DateTime DataType中的NULL值

Sha*_*pta 4 xml sql t-sql sql-server

我在sql server中创建了一个示例查询来解析xml中的数据并立即显示它.虽然我会在我的表中插入这些数据,但在此之前我面临一个简单的问题.

我想在datetime字段中插入NULL,ADDED_DATE="NULL"如下面给出的xml所示.但是当我执行这个查询时.它给了我错误

从字符串转换datetime时转换失败.

我在做什么错 请突出我的错误.

declare @xml varchar(1000)
set @xml= '
<ROOT>
    <TX_MAP FK_GUEST_ID="1"  FK_CATEGORY_ID="2" ATTRIBUTE="Test" DESCRIPTION="TestDesc" IS_ACTIVE="1" ADDED_BY="NULL" ADDED_DATE="NULL" MODIFIED_BY="NULL" MODIFIED_DATE="NULL"></TX_MAP>
    <TX_MAP FK_GUEST_ID="2"  FK_CATEGORY_ID="1" ATTRIBUTE="Test2" DESCRIPTION="TestDesc2" IS_ACTIVE="1" ADDED_BY="NULL" ADDED_DATE="NULL" MODIFIED_BY="NULL" MODIFIED_DATE="NULL"></TX_MAP>
</ROOT> '

declare @handle int
exec sp_xml_preparedocument @handle output, @xml

select * from OPENXML(@handle,'/ROOT/TX_MAP',1)
with 
    (
    FK_GUEST_ID INT
    ,FK_CATEGORY_ID VARCHAR(10)
    ,ATTRIBUTE VARCHAR(100)
    ,[DESCRIPTION] VARCHAR(100)
    ,IS_ACTIVE VARCHAR(10)
    ,ADDED_BY VARCHAR(100)
    ,ADDED_DATE DATETIME NULL
    ,MODIFIED_BY VARCHAR(100)
    ,MODIFIED_DATE DATETIME NULL
    )
Run Code Online (Sandbox Code Playgroud)

我正在使用Sql Server 2005.

Sha*_*pta 7

谷歌搜索了一个小时后,我得到了我的问题的答案,并希望与大家分享,以便将来的用户变得容易.

declare @xml varchar(1000)
set @xml= '
<ROOT>
    <TX_MAP FK_GUEST_ID="1"  FK_CATEGORY_ID="2" ATTRIBUTE="Test" DESCRIPTION="TestDesc" IS_ACTIVE="1" ADDED_BY="NULL" ADDED_DATE="12/3/2010" MODIFIED_BY="NULL" MODIFIED_DATE="12/3/2010"></TX_MAP>
    <TX_MAP FK_GUEST_ID="2"  FK_CATEGORY_ID="1" ATTRIBUTE="Test2" DESCRIPTION="TestDesc2" IS_ACTIVE="1" ></TX_MAP>
</ROOT> '

declare @handle int
exec sp_xml_preparedocument @handle output, @xml

select * from OPENXML(@handle,'/ROOT/TX_MAP',1)
with 
    (
    FK_GUEST_ID INT
    ,FK_CATEGORY_ID VARCHAR(10)
    ,ATTRIBUTE VARCHAR(100)
    ,[DESCRIPTION] VARCHAR(100)
    ,IS_ACTIVE VARCHAR(10)
    ,ADDED_BY VARCHAR(100)
    ,ADDED_DATE DATETIME
    ,MODIFIED_BY VARCHAR(100)
    ,MODIFIED_DATE DATETIME 
    )
Run Code Online (Sandbox Code Playgroud)

您需要做的只是省略那些将导致NULL值的属性.