0

我是 sql 服务器的新手。我用google搜索了coalesce的用法,发现它是ISNULL的替代词。

我在论坛上看到了一段关于合并的不同用途的代码。

use adventureworks

DECLARE @DepartmentName VARCHAR(1000)

SELECT @DepartmentName = COALESCE(@DepartmentName,'') + Name + ';' 
FROM HumanResources.Department
WHERE (GroupName = 'Executive General and Administration')

SELECT @DepartmentName AS DepartmentNames

它在一行中返回结果。

那么,为什么 sql 在 .NET 中默认不支持字符串连接,如下所示?

DECLARE @DepartmentName VARCHAR(1000)

    **SELECT @DepartmentName = @DepartmentName + Name + ';'**
    FROM HumanResources.Department
    WHERE (GroupName = 'Executive General and Administration')

    SELECT @DepartmentName AS DepartmentNames

下面的行中合并的用途是什么

SELECT @DepartmentName = COALESCE(@DepartmentName,'') + Name + ';' 

为什么

**SELECT @DepartmentName = @DepartmentName + Name + ';'**
    FROM HumanResources.Department
    WHERE (GroupName = 'Executive General and Administration')

不管用?

4

4 回答 4

2

coalesce只需返回其参数列表中第一个non-NULL参数的值。

例如

1.select coalesce(NULL,0,2,1);

将返回 0 因为0 并不意味着 NULL

2.select coalesce(id,emp_id,0) from tab1;

在这种情况下,如果是则返回attribute- ,否则id返回if is,否则NOT NULL返回0。emp_idNOT NULL emp_id

在这种情况下,您可以简单地使用+-operator 或concat()-function进行连接。但这里coalesce用于这种情况,DepartmentName=NULL因为如果你连接或对结果进行一些操作,NULL结果将是NULL. 因此使用空白(即'')代替NULL coalesce()已被使用。

在这种情况下,在声明时coalesce已按原样使用DepartmentName使用MohoNULL在他的回答中给出的语法来代替.coalesce

于 2013-10-05T02:43:38.007 回答
0

COALESCE()返回第一个非空项。这段代码:

COALESCE(@DepartmentName,'') 

表示如果部门名称为空则返回空白。

将 anull与某物连接会得到 a null,所以如果你不使用COALESCE(),你也会失去name价值。

于 2013-10-05T01:44:50.450 回答
0

COALESCE 从参数列表中返回第一个不计算为 NULL 的表达式。

对于您的示例 COALESCE(@DepartmentName,'') 这意味着如果 #DepartmentName 为 NULL 它应返回 '' (空字符串)。这是必需的,因为将字符串与空值连接会返回 NULL。

SELECT 'test' + NULL -- 将返回 NULL

合并 (Transact-SQL)

于 2013-10-05T01:51:23.247 回答
0

添加set @DepartmentName = ''之后DECLARE @DepartmentName VARCHAR(1000),您将不需要合并语句。

编辑:在评论为我澄清事情后更新

于 2013-10-05T03:00:21.537 回答