我是sql server的新手。我用Google搜索了coalesce,发现它是另一个替代ISNULL的词。
我在forum中发布了一段关于合并的不同用法的代码。
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
在下面的行中使用coalesce是什么
SELECT @DepartmentName = COALESCE(@DepartmentName,'') + Name + ';'
以及为什么
**SELECT @DepartmentName = @DepartmentName + Name + ';'**
FROM HumanResources.Department
WHERE (GroupName = 'Executive General and Administration')
无效?
答案 0 :(得分:2)
coalesce
只会在参数列表中返回第一个non-NULL
参数的值。
e.g。
1.select coalesce(NULL,0,2,1);
将返回0,因为 0并不意味着空。
2.select coalesce(id,emp_id,0) from tab1;
在这种情况下,如果属性为id
,则会返回NOT NULL
,否则emp_id
将NOT NULL
emp_id
将被返回,否则将返回0
在这种连接情况下,您只需使用+
- 运算符或concat()
- 函数即可。但是,此处coalesce
用于 DepartmentName=NULL
的情况,因为如果您使用 NULL
连接或执行某些操作,结果将是的 NULL
即可。因此,使用空白(即''
)代替NULL
coalesce()
。
在这种情况下,coalesce
在宣布时DepartmentName
被用作NULL
coalesce
。使用 Moho 在其答案中给出的语法替代{{1}}的使用。
答案 1 :(得分:0)
COALESCE()
返回第一个非空术语。这段代码:
COALESCE(@DepartmentName,'')
表示如果部门名称为空,则返回空白。
将null
与某些内容联系起来会产生null
,因此如果您不使用COALESCE()
,您也会失去name
值。
答案 2 :(得分:0)
COALESCE从参数列表返回第一个不计算为NULL的表达式。
对于您的示例COALESCE(@DepartmentName,''),这意味着如果#DepartmentName为NULL,则应返回''(空字符串)。这是必需的,因为使用空值连接字符串将返回NULL。
SELECT'test'+ NULL - 将返回NULL
答案 3 :(得分:0)
在set @DepartmentName = ''
之后添加DECLARE @DepartmentName VARCHAR(1000)
,您将不需要合并声明。
编辑:在评论为我澄清之后更新