gpt4 book ai didi

sql - Group String Concatenation : which approach, 如果有的话,还有保证吗?

转载 作者:行者123 更新时间:2023-12-05 00:35:27 25 4
gpt4 key购买 nike

Itzik Ben-Gan 在他的书“Inside Microsoft® SQL Server® 2008: T-SQL”中解释了如何方法 A 工作,因为 SQL Server 的未记录行为,它为来自 SELECT 的每个结果记录执行分配。 .

一位受人尊敬的同事和 DB 专家建议 方法B 保证工作。他的论点基于 COALESCE 的递归性质。与 CAST 的“值扩展”方法相比.

实际上,我不知道“值扩展”指的是什么(除了它将一个值转换为另一个值这一事实)或者它如何适用于这个问题?或许他误会了?是 COALESCE在某种意义上是递归的,但据我所知,它无关紧要,并且由于多重赋值的未记录行为而产生了所需的结果。

他说得对吗?请不要回答“使用 FOR XML PATH”!

方法 A

DECLARE @output VARCHAR(100);
SET @output = '';

SELECT @output = @output + CAST(COL_VCHAR AS VARCHAR(10)) + ';'
FROM someTable;

方法B
DECLARE @output VARCHAR(100);
SELECT @output = COALESCE(@output + ', ', '') + COL_VCHAR
from someTable;

最佳答案

我相信它们都工作是因为相同的潜在(和未记录的)行为。我相当有信心,如果你采取 Itzik 证明的案例 方法 A 失败,那 方法B 尽管您的同事提出了要求,但也会以相同的方式和原因失败。我不明白如何

DECLARE @output VARCHAR(100);
SELECT @output = COALESCE(@output + ', ', '') + COL_VCHAR

有什么不同:
DECLARE @output VARCHAR(100) = '';
SELECT @output = @output + ', ' + COL_VCHAR
-- or SELECT @output += ',' + COL_VCHAR

那么究竟是什么 COALESCE神奇地介绍? SQL Server 不会因为你对输出所做的事情而改变它的计划,AFAIK。

我一直将它们用于动态 SQL 生成,并且不记得曾经看到它们失败,而且我意识到这不是您的问题。不幸的是,除非您知道任何一种方法都失败的案例,否则没有真正的方法来证明它。

几个月前我写了一篇关于字符串连接的博客文章。它与您的问题并不完全相关,但 Rob Farley 发表的评论可能被认为是 COALESCE 的另一个缺点。方法:

https://sqlblog.org/2011/03/08/t-sql-tuesday-16-this-is-not-the-aggregate-youre-looking-for

关于sql - Group String Concatenation : which approach, 如果有的话,还有保证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9317170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com