我需要执行以下操作:
SELECT * FROM [MY_TVF](9186)
FOR XML AUTO, ELEMENTS
并用空字符串NULL
替换所有''
值,以将它们包含在XML中。我知道我可以通过设置xsi:nil="true"
来使用ELEMENTS XSINIL
属性吐出元素,但我不想要它。
我发现了这个问题:Convert NULL to Empty String SQL Server,答案说我可以在查询中使用ISNULL()
。我试过这样:
ISNULL((SELECT * FROM [MY_TVF](9186)),'')
FOR XML AUTO,ELEMENTS
但我无法让它发挥作用。我收到以下错误:
Msg 102,Level 15,State 1,Line 1 ','附近的语法不正确。
我可以做些什么来简单地用空字符串替换所有NULL
值,以便它们包含在XML中?
无法用列名替换*
。我们使用TVF有一个原因,大约有40列,它们可能会随着时间而改变。我的查询只是选择所有内容并将其作为XML返回。
答案 0 :(得分:5)
我删除了之前的答案,这是最新答案:
Declare @ColName as Varchar(max)
SEt @ColName=''
SELECT @ColName= COALESCE( @ColName + ' ISNULL(' +c.name + ','''') ','', '') +
c.name + ', '
FROM sysobjects o
JOIN syscolumns c ON o.id = c.id
WHERE o.xtype = 'U'
AND (o.name ='tbName')
SEt @ColName= ( 'Select ' + SUBSTRING(@ColName,0,LEN(@ColName)-1) + ' FROM tbName')
print @colname
EXEC(@ColName)
答案 1 :(得分:0)
摆脱SELECT *
看看是否有效。
SELECT Col1,Col2,Col3,Col4,Col5
FROM
(
SELECT
ISNULL(Col1,'') Col1,
ISNULL(Col2,'') Col2,
ISNULL(Col3,'') Col3,
ISNULL(Col4,'') Col4,
ISNULL(Col5,'') Col5
FROM [MY_TVF](9186)
) T
FOR XML AUTO,ELEMENTS