了解 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 中所有行的字符串。为什么?因为 @StringList
是 NULL
,所以第一个表达式的计算结果为 ''
,第二个表达式的计算结果为 table 中某行中 ApId
的字符串表示形式。
我警告你转换为 VARCHAR
没有长度。不要这样做!默认长度因上下文而异,如果没有长度,您可能会引入非常难以调试的错误。
一个相关的表达比较常见,我觉得:
SELECT @StringList = COALESCE(@StringList + ',', '') + CAST(apID as VARCHAR(8000)) AS ApIdList
FROM testTable;
这会进行字符串连接,因此 apID
的所有值都连接在一起以逗号分隔的字符串。
这样做是在结果集上循环以分配变量。不鼓励跨多行分配这种类型的变量。我不认为 SQL 服务器保证它确实有效(即是一个记录的功能),但它似乎在所有版本中都有效。
我正在尝试理解以下语法。我能得到一些帮助吗?
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 中所有行的字符串。为什么?因为 @StringList
是 NULL
,所以第一个表达式的计算结果为 ''
,第二个表达式的计算结果为 table 中某行中 ApId
的字符串表示形式。
我警告你转换为 VARCHAR
没有长度。不要这样做!默认长度因上下文而异,如果没有长度,您可能会引入非常难以调试的错误。
一个相关的表达比较常见,我觉得:
SELECT @StringList = COALESCE(@StringList + ',', '') + CAST(apID as VARCHAR(8000)) AS ApIdList
FROM testTable;
这会进行字符串连接,因此 apID
的所有值都连接在一起以逗号分隔的字符串。
这样做是在结果集上循环以分配变量。不鼓励跨多行分配这种类型的变量。我不认为 SQL 服务器保证它确实有效(即是一个记录的功能),但它似乎在所有版本中都有效。