0

我需要执行以下操作:

 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

但我无法让它工作。我收到以下错误:

消息 102,级别 15,状态 1,第 1 行 ',' 附近的语法不正确。

我可以做些什么来简单地用NULL空字符串替换所有值,以便它们包含在 XML 中?

编辑

无法替换*按列名。我们使用 TVF 是有原因的,大约有 40 列,它们可能会随着时间而改变。我的查询只是选择所有内容并将其作为 XML 返回。

4

2 回答 2

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)
于 2014-08-08T12:07:18.207 回答
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
于 2014-08-08T11:33:20.590 回答