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]
谁能解释一下这是怎么回事
工作方式很简单:
当在串行计划(非并行)中运行时,从SELECT
出来的每一行都将获取@ColumnName
的现有值并将其连接起来。
如果在并行计划中运行,由于不同线程之间的竞争条件,它可能返回不正确的结果。因此,在这样的查询中必须使用OPTION(MAXDOP 1)
。
在任何情况下,即使是串行计划也不能保证SQL Server返回正确的结果,只是人们一直观察到它们是这样做的,而且这可能会改变。
所以你最好使用合适的聚合函数,如STRING_AGG
或FOR XML PATH