理解COALESCE的语法

时间:2016-12-15 20:48:15

标签: sql sql-server-2008 coalesce

我试图理解下面的语法。我可以帮忙解决这个问题。

DECLARE @StringList VARCHAR(2500); 
SELECT  COALESCE(@StringList + ',','') + CAST(apID as VARCHAR) AS ApIdList FROM testTable

3 个答案:

答案 0 :(得分:1)

因此,您将从apID

中的testTable获取所有VARCHAR

COALESCE 检查第一个参数是否为NULL,然后返回第二个参数。在此行@StringList始终等于NULL

COALESCE(@StringList + ',','')

所以,NULL + ',' = NULL,你会得到空字符串(''

然后empty string + CAST(apID as VARCHAR),您将apID作为VARCHAR

答案 1 :(得分:1)

Coalesce返回提供的列表中提供的第一个非null元素。见 - https://msdn.microsoft.com/en-us/library/ms190349.aspx

在你的情况下,如果@StringList不为null,那么它的内容将在testTable的每一行的appID前面加上逗号。

答案 2 :(得分:1)

您的代码返回ApID作为表中所有行的字符串。为什么?因为@StringListNULL所以第一个表达式求值为'',第二个表达式求值为表中某行中ApId的字符串表示形式。

我提醒您注意转换为VARCHAR没有长度。不要这样做!默认长度因上下文而异,您可以在没有长度的情况下引入非常难以调试的错误。

我认为相关的表达更常见:

SELECT @StringList = COALESCE(@StringList + ',', '') + CAST(apID as VARCHAR(8000)) AS ApIdList
FROM testTable;

这会进行字符串连接,因此apID的所有值都以逗号分隔的字符串连接在一起。

这样做是循环结果集以分配变量。不鼓励这种类型的变量跨多行分配。我不认为SQL Server保证它实际工作(即是一个记录的功能),但它似乎在所有版本的实践中都有效。