Sql server 查找特定SQL Server模式的名称
我在SQL中胡闹,我偶然发现了这段代码,原因是我无法解释至少在SQLServer2008中的工作原理 我通常不会这样问,但我不知道我应该寻找什么,我希望找到答案Sql server 查找特定SQL Server模式的名称,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我在SQL中胡闹,我偶然发现了这段代码,原因是我无法解释至少在SQLServer2008中的工作原理 我通常不会这样问,但我不知道我应该寻找什么,我希望找到答案 DECLARE @Number INT = 1 SELECT @Number = @Number + N FROM (SELECT * FROM (VALUES (2), (3), (4)) vals(N)) vals PRINT @Number 这将增加1+2+3+4,并产生10 为什么这样做?这个模式有名字吗?
DECLARE @Number INT = 1
SELECT @Number = @Number + N
FROM (SELECT * FROM (VALUES (2), (3), (4)) vals(N)) vals
PRINT @Number
这将增加1+2+3+4,并产生10
为什么这样做?这个模式有名字吗?这是反模式吗?是的,这是反模式 它不能保证工作()并且会抑制并行性。只需使用
SUM
DECLARE @Number INT = 1
SELECT @Number+= SUM(N)
FROM (SELECT * FROM (VALUES (2), (3), (4)) vals(N)) vals
PRINT @Number
它类似于另一种连接字符串的旧技术,即
为什么这样做有效
当它工作正常时,对于源中的每一行,该变量将递增
N
。但是,这取决于执行计划,如链接的连接项所示。哦,亲爱的。非常感谢你的链接。这就是我想要的,因为我计划用它来格式化货币。我需要重新考虑。