如何从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
的结果。如何实现这一目标?
答案 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类型而更改了查询。