2017-03-09 130 views
3

我轉換的XML字符串表類型:如何返回null當元素爲null

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的可空列上返回null?

+2

我們能有一個*最小*但是*,上述完整*樣片XML的查詢可以運行嗎? –

回答

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)