【发布时间】:2014-10-01 20:57:46
【问题描述】:
我需要执行以下操作:
SELECT * FROM [MY_TVF](9186)
FOR XML AUTO, ELEMENTS
并将所有 NULL 值替换为空字符串 '' 以将它们包含在 XML 中。我知道我可以通过设置ELEMENTS XSINIL 来吐出具有xsi:nil="true" 属性的元素,但我不希望这样。
我发现了这个问题: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 返回。
【问题讨论】:
-
如果您单独列出列,您可以使用
isnull()或coalesce()。它们不会同时处理多个列。 -
@GordonLinoff 我知道,但是大约有 40 列,有些列的名称很长。更重要的是,它们可以改变,因此它们被指定为 TVF。我需要那个
*! -
@MDeSchaepmeester 。 . .那么就需要使用动态SQL来获取所有的列名。
-
你为什么不改变对列使用 COALESCE 或 ISNULL 的 TVF(或制作副本),而不是跺脚?
-
“无法用列名替换 *。我们使用 TVF 是有原因的,大约有 40 列,它们可能会随着时间而改变。”如果列发生变化,只需进入并更改您的 SQL 语句。这是开发世界中非常普遍的做法。出于多种原因,使用
SELECT *是一个坏主意,而您现在遇到了其中一个。
标签: sql sql-server xml isnull null-coalescing