Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 查找特定SQL Server模式的名称_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 查找特定SQL Server模式的名称

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 为什么这样做?这个模式有名字吗?

我在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


为什么这样做?这个模式有名字吗?这是反模式吗?

是的,这是反模式

它不能保证工作()并且会抑制并行性。只需使用
SUM

  DECLARE @Number INT = 1

  SELECT @Number+= SUM(N)
  FROM (SELECT * FROM (VALUES (2), (3), (4)) vals(N)) vals

  PRINT @Number
它类似于另一种连接字符串的旧技术,即

为什么这样做有效


当它工作正常时,对于源中的每一行,该变量将递增
N
。但是,这取决于执行计划,如链接的连接项所示。

哦,亲爱的。非常感谢你的链接。这就是我想要的,因为我计划用它来格式化货币。我需要重新考虑。