Различные результаты при вставке в временную таблицу и табличную переменную - PullRequest
1 голос
/ 25 апреля 2019

Когда я использую переменную таблицы для хранения запрашиваемого результата, вот так:

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 Ответ

1 голос
/ 25 апреля 2019

В реляционной базе данных ваша таблица является набором. Это означает, что 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...