【发布时间】:2012-06-03 17:27:08
【问题描述】:
我环顾四周,似乎遇到了 SQL Server 2008 R2 的一个奇怪问题。
我明白,使用 CONCAT_NULL_YIELDS_NULL = ON 意味着以下将始终解析为 NULL
SELECT NULL + 'My String'
我对此很满意,但是当将它与 COALESCE() 结合使用时,它似乎无法在我的数据库上运行。
考虑以下查询,其中 MyString 是 VARCHAR(2000)
SELECT COALESCE(MyString + ', ', '') FROM MyTableOfValues
现在在我的查询中,当 MyString 为 NULL 时,它返回一个空(非 NULL)字符串。我可以在查询结果窗口中看到这一点。
然而非常不寻常的是,当它与 INSERT 一起运行时,它无法识别 CONCAT_NULL_YIELDS_NULL,而是插入了一个空白“,”。
insert的查询如下。
CONCAT_NULL_YIELDS_NULL ON
INSERT INTO Mytable(StringValue)
SELECT COALESCE(MyString + ', ', '')
FROM MyTableOfValues
除此之外,我还检查了数据库和 CONCAT_NULL_YIELDS_NULL = TRUE……
【问题讨论】:
-
您的 COALESCE 参数列表中的逗号似乎太多了。尝试 COALESCE(MyString + ', ', '') 而不是 COALESCE(MyString, + ', ', '')。
-
抱歉 Jakob,我在上面的例子中打错了。查询已针对此问题重新格式化,因为我不打算发布所有列详细信息。您可以将 (MyString + ', ', '') 视为我使用的。抱歉...我会编辑帖子。
-
因为我在字符串上使用了联系人,因为我想在末尾使用逗号和空格。使用 CONCAT_NULL_YIELDS_NULL,MyString + ', ' 不应该返回 Null 值,因此输出 ''。我当然在输出窗口中看到了这一点(SSMS 中的网格结果),但它在插入时不起作用。 - 编辑,大写。
-
无法重现(通过在
CONCAT_...前面添加SET更正了您的示例查询) - 如果我们使用您 已运行显示问题。 -
我意识到虽然
COALESCE()正在检查空值,但该表有空字符串,由于它的格式化方式我没有看到。因此,(我觉得有点愚蠢)它按预期工作。我需要从“MyTableOfValues”中选择退出任何空字符串。
标签: tsql sql-server-2008-r2 string-concatenation