【问题标题】:How to view the variable value in sql server如何查看sql server中的变量值
【发布时间】:2021-05-24 19:06:18
【问题描述】:
DECLARE @ColumnName AS NVARCHAR(MAX)

--Get distinct values of the PIVOT Column 
SELECT @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(Week)
FROM (SELECT DISTINCT Week FROM #yt) AS Weeks

--execute (@ColumnName)
print @ColumnName

输出是[1],[2],[3]

谁能解释一下这是如何工作的

【问题讨论】:

  • 选择@ColumnName
  • 这是如何工作的? Badly:“不要在 SELECT 语句中使用变量来连接值(即计算聚合值)。可能会出现意外的查询结果。因为,SELECT 列表中的所有表达式(包括赋值)不一定每个输出行只运行一次。”

标签: sql sql-server


【解决方案1】:

它的工作方式非常简单:

在串行计划(非并行)中运行时,来自SELECT 的每一行都将采用@ColumnName 的现有值并将其连接起来。

如果在并行计划中运行,由于不同线程之间的竞争条件,它可能会返回不正确的结果。 因此,您必须在此类查询中使用OPTION(MAXDOP 1)

无论如何,即使是串行计划也是由 SQL Server not guaranteed 返回正确结果,只是人们一直观察他们这样做,并且可能会改变。

所以你最好使用适当的聚合函数,例如STRING_AGGFOR XML PATH

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多