2016-11-28 64 views
3

我有一组动态查询,它们以varchars的形式返回XML,见下文。SQL Server 2008:在动态XML查询中返回空值

例子查询:

set @sqlstr = 'Select ''<?xml version="1.0" encoding="windows-1252" ?>'' + ''<File_Name><Location>'' + (Select a,b,c from table for xml path(''Row'')) + </Location></File_name>''' 

exec(@sqlstr) 

此作品一种享受,直到select a,b,c ...查询为空。然后,我没有收到外部因素如你所期望的一样:

<?xml version="1.0" encoding="windows-1252"><File_Name><Location><Row></Row></Location></File_name> 

所有我收到是NULL

后有点谷歌搜索,我发现这个问题是NULL结果的拼接是一个完整的NULL结果。然而,我找不到一个解决方案给我我期望的结果。

我试过(不要说我已经试过正确)

IsNull(Exec(@sqlstring),'*blank elements*') 
xsnil (doesn't seem to work in dynamic queries) 
@result = exec(@sqlstring) then isnull and select 

任何人都有一个更好的解决办法? (最好是小,由于多个这样的查询)

回答

1

我想你需要的东西是这样的:

set @sqlstr = 'Select ''<?xml version="1.0" encoding="windows-1252" ?><File_Name><Location>'' + (Select IsNull(a, '') as a, IsNull(b, '') as b,IsNull(c, '') as c from table for xml path(''Row'')) + </Location></File_name>''' 

exec(@sqlstr) 
+1

这是我的错误,我做了A,B,C为例如其实际*作为其在某些情况下20领域。你的答案将起作用,如果没有更短的方法,那么必须列出每一个,然后我会接受作为答案,谢谢 –

+0

如果有一个更短的方式,让我知道,所以我可以学习@LRiley –

+0

我会做'将张贴任何答案,我找到 –