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

时间:2019-04-25 05:17:32

标签: sql-server stored-procedures sql-server-2008-r2 temp-tables table-variable

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

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。

1 个答案:

答案 0 :(得分:1)

在关系数据库中,您的表是一个集合。这意味着不需要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;