插入临时表和表变量时的结果不同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入临时表和表变量时的结果不同相关的知识,希望对你有一定的参考价值。

当我使用表变量存储查询结果时,如下所示:

INSERT INTO @sortedArticleIds
    SELECT article_id, NULL AS groupBy
    FROM #articleIds a
    GROUP BY article_id
    ORDER BY MIN(sortBy) DESC;

插入@sortedArticleIds的行随机变化。

但如果我像这样使用#table

INSERT INTO #tmp_table
    SELECT article_id, NULL AS groupBy
    FROM #articleIds a
    GROUP BY article_id
    ORDER BY MIN(sortBy) DESC;

插入#tmp_table的行总是相同的。

我正在使用SQL Server 2008 R2。

答案

在关系数据库中,您的表是一个集合。这意味着你不需要插入ORDER BY和你的GROUP BY

INSERT INTO @sortedArticleIds
SELECT article_id, NULL AS groupBy
FROM #articleIds

在这里您要更新表,因此我们不需要ORDER BY子句。

但是当你查询你的表时,更喜欢这样的查询。

SELECT *
FROM @sortedArticleIds
GROUP BY article_id
ORDER BY MIN(sortBy) DESC;

以上是关于插入临时表和表变量时的结果不同的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中的临时表和表变量有啥区别?

SQL Server 临时表和表变量系列之选择篇

InMemory:在内存中创建临时表和表变量

公用表表达式(CTE)

T-SQL 之 公用表表达式(CTE)

如何从不同的表和视图中删除/插入