了解 COALESCE 的语法

Understanding the Syntax for COALESCE

我正在尝试理解以下语法。我能得到一些帮助吗?

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

因此,您将在 VARCHAR

中从 testTable 获得所有 apID

COALESCE 检查第一个参数是否为 NULL 然后第二个参数将返回。在这一行中 @StringList 总是等于 NULL

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

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

然后 empty string + CAST(apID as VARCHAR) 你会得到 apID 作为 VARCHAR

合并returns 提供的列表中提供的第一个非空元素。参见 - https://msdn.microsoft.com/en-us/library/ms190349.aspx.

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

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

我警告你转换为 VARCHAR 没有长度。不要这样做!默认长度因上下文而异,如果没有长度,您可能会引入非常难以调试的错误。

一个相关的表达比较常见,我觉得:

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

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

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