SQL 服务器内联查询在幕后创建临时表

Do SQL Server inline queries create temp tables under the hood

最近我遇到了一个问题,我在执行动态 SELECT INTO #TempTable ... 查询时达到了 8060 行限制。这个 temp table 又被用于一个更大的 JOIN 和一个 PIVOT 操作。当我遇到行限制问题时,我将 SELECT 查询添加为较大查询中的内联查询(两者都是动态 SQL 查询)但仍然遇到 8060 行限制的问题,所以想知道是否内联查询在执行期间在幕后创建临时或其他类型的 tables。

我看到的错误如下所示,

"Cannot create a row of size XXXX which is greater than the allowable maximum row size of 8060"

大多数情况下,这是一个明确的指示,表明您的数据库/table 设计存在问题。

能否将您尝试的查询添加到 运行 您的 post?

More information about this particular error can also be found here.

SQL 服务器可以采用一种称为 Spooling 的技术,其中它创建一个结构 类似于 tempdb 中的临时 table。

一般来说,如果它有一个需要多次使用的中间结果,并且它认为存储和检索该数据的成本将低于重新生成中间结果。

可能能够通过为您的查询生成一个Estimated Execution Plan来识别这种情况。遗憾的是,无法保证估计的计划与查询生成的实际计划相同。