如何在element为null时返回null

时间:2017-03-09 13:02:28

标签: sql sql-server

我正在将xml字符串转换为表格类型:

SELECT
[Guid] = r.value('(Guid)[1]', 'uniqueidentifier'),
[Id] = r.value('(Id)[1]', 'int'),
[SomeColumn] = r.value('(SomeColumn)[1]', 'int'),
FROM
@xml.nodes('//Items') AS T(r)

SomeColumn是一个可以为空的int。对于此元素,传递的xml如下:

<SomeColumn xsi:nil="true" />

但是,该列设置为0而不是null。有没有办法强制在实际为空的可空列上返回null?

1 个答案:

答案 0 :(得分:3)

好吧,您可以将其检索为varchar而不是int,然后检查检索到的字符串的空白,例如:

SELECT
    [Guid] = r.value('(Guid)[1]', 'uniqueidentifier'),
    [Id] = r.value('(Id)[1]', 'int'),
    [SomeColumn] = cast(nullif(r.value('(SomeColumn)[1]', 'varchar(20)'), '') as int)
FROM
    @xml.nodes('//Items') AS T(r)