我昨天问了一个类似的问题,但仍然没有基本理解为什么这个逻辑有效。我得到了正确的输出,对此我很满意,但是为什么它会以这种方式工作呢?
例如,我们正在使用这个简单的查询:
create table #TestTable (FakeColumn varchar(50))
INSERT INTO #TestTable (FakeColumn) VALUES ('ABC'),('DEF'),('GHI'),('JKL')
DECLARE @columns VARCHAR(8000)
SELECT @columns = COALESCE(@columns + ',[' + cast(FakeColumn as varchar) + ']',
'[' + cast(FakeColumn as varchar)+ ']')
FROM #TestTable
GROUP BY FakeColumn
select @columns
drop table #TestTable
以下查询的输出是:[ABC],[DEF],[GHI],[JKL]
这恰好是我所需要的......但是假设我们将查询修改为:
SELECT @columns = '[' + cast(FakeColumn as varchar)+ ']'
FROM #TestTable
GROUP BY FakeColumn
select @columns
- 为什么我现在的输出是:
[JKL]
?
现在,如果我们修改COALESCE
为仅包含第一个参数 [@columns 附加到前面]
SELECT @columns = @columns + ',[' + cast(FakeColumn as varchar) + ']'
FROM #TestTable
GROUP BY FakeColumn
- 为什么我现在的输出是:
NULL
?
看起来我在 COALESCE 语句中的第一个值返回 NULL,因此它应该转到我的第二个语句,但那只是返回[JKL]
......但是,将它们结合起来,我得到了我需要的字符串......我不是确定这是如何工作的,或者为什么会这样。任何人都可以帮助向菜鸟解释这一点吗?