返回' 0'在读取SQL中的XML属性时使用INT

时间:2015-12-15 12:02:37

标签: sql sql-server xml tsql

如何从XML返回INT值0而不是NULL?请考虑以下事项:

DECLARE @xml XML ='<asset> <cnfg categ="Desktop" type="hj" device="3"/></asset>';        

DECLARE @Str1 INT;
DECLARE @Str2 INT;

SELECT  @Str1 = ParamValues.Content.value('@dev', 'int'),
        @Str2 = ParamValues.Content.value('@device', 'int') 
FROM @xml.nodes('/asset/cnfg') as ParamValues(Content)

SELECT @Str1, @str2

上面的代码返回NULL,3,但我希望得到0,3的结果。如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

我认为你只需要coalesce()

SELECT @Str1 = COALESCE(ParamValues.Content.value('@dev', 'int'), 0),
       @Str2 = COALESCE(ParamValues.Content.value('@device', 'int'), 0)
FROM @xml.nodes('/asset/cnfg') as ParamValues(Content)

答案 1 :(得分:1)

同样可以实现如下 -

查询 -

DECLARE @xml XML 
SET @xml='<asset><cnfg categ="Desktop" type="hj" device="3"/></asset>'
DECLARE @Str1 INT,@Str2 INT
SELECT @Str1 = ISNULL(ParamValues.Content.value('(@dev)[1]', 'int'),0),
       @Str2 = ISNULL(ParamValues.Content.value('(@device)[1]', 'int'),0) 
FROM @xml.nodes('/asset/cnfg') as ParamValues(Content)
SELECT @Str1, @str2

编辑:由于考虑了错误的XML类型而更改了查询。