Поведение функции ИДЕНТИФИКАТОРОВ при использовании SELECT INTO или INSERT... ВЫБЕРИТЕ запросы, содержащие предложения ORDER BY

Переводы статьи Переводы статьи
Код статьи: 273586 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

При использовании запроса SELECT INTO с УДОСТОВЕРЕНИЕ функцию и предложение ORDER BY, значения идентификаторов, которые создаются в порядке порядок, в котором обеспечивается с помощью предложения ORDER BY не гарантируется. Например если УДОСТОВЕРЕНИЕ функции начинается с начального значения 1 и шаг 1, первая строка в упорядоченный результирующий набор может иметь значение отличается от 1, а вторая строка может иметь значение отличается от 2 и т. д.Хотя порядок может отображаться должным образом, поведение не гарантировано. Наличие ВЕРХНЕЙ или SET ROWCOUNT также не гарантирует порядок строк.

Если требуется, чтобы УДОСТОВЕРЕНИЕ значения, назначенные в последовательной манере, после сортировки в предложении ORDER BY создать таблицу, которая содержит столбец с УДОСТОВЕРЕНИЕ свойства, а затем запустите инструкции INSERT... ВЫБЕРИТЕ … Запрос ORDER BY для заполнения этой таблицы.

Дополнительная информация

Значения идентификаторов, которые создаются зависят от положения GetIdentity() функции в дереве запросов (showplan), который может меняться в оптимизатор изменения, планы параллельных запросов или наличие ВЕРХНЕЙ/SET ROWCOUNT. Хотя ситуации, в которых может появиться SELECT INTO с УДОСТОВЕРЕНИЕ функции и предложение ORDER BY создавать значения в порядке, в котором представителями это поведение не гарантировано и может быть изменена без предупреждения. Следующие сценарии включают в себя Инструкция SELECT INTO и УДОСТОВЕРЕНИЕ функция.

Рассмотрим таблицу с именем OldTable со следующими значениями.
Col1      Col2
-------   --------
1         A          
11        F 
7         G          
17        I          
2         Z          

В сценарии 1

В этом случае запрос SELECT INTO использует функцию ИДЕНТИФИКАЦИИ и предложение ORDER BY.
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO 	NewTable
FROM 	OldTable
Order By Col1
Новой_таблицы может быть вставлен с одним из следующих двух строк способы.

Способ 1

Col1      Col2       ID
-------   --------   --------
1         A          4
2         Z          2
7         G          5
11        F          3
17        I          1
Вы можете заметить, что значения ИДЕНТИФИКАТОРОВ, SQL Server создает не находится в том же порядке, как столбец (ORDER BY)Столбец1) в запросе.

Способ 2

Col1     Col2       ID
-------  --------   -------
1        A          1
2        Z          2
7        G          3
11       F          4
17       I          5
В этом случае вы можете заметить, что УДОСТОВЕРЕНИЕ значение, SQL Сервер создает в том же порядке, как столбец (ORDER BY)Столбец1) в запросе. Тем не менее, это является полностью случайными и не гарантируется, что заказ будет получать каждый раз при выполнении запроса.

Сценарий 2

Следующие запросы SELECT INTO используется функция IDENTITY и Предложение ORDER BY, с помощью инструкции SET ROWCOUNT или оператор TOP.
SELECT TOP 3 Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
-ИЛИ-
SET ROWCOUNT 3
SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
Новой_таблицы может быть вставлен с строк в одной из следующих трех возможных способами:

Способ 1

Col1   Col2   ID
-----  -----  -----
1      A      2
2      Z      1
7      G      3
В этом случае может появиться, УДОСТОВЕРЕНИЕ значение SQL Server Создает не находится в том же порядке, как столбец (ORDER BY)Столбец1) в запросе.

Способ 2

Col1    Col2     ID
------  ------   ------
1       A        1
2       Z        2
7       G        3
В этом случае вы можете заметить, что УДОСТОВЕРЕНИЕ значение, SQL Сервер генерирует — точно в том же порядке, как столбец (ORDER BY)Столбец1) в запросе. Тем не менее, это является полностью случайными и не гарантируется, что заказ будет получать каждый раз при выполнении запроса.

Способ 3

Col1   Col2    ID
------ ------  ------
1      A       4
2      Z       2
7      G       5
В этом случае не имеет значения ИДЕНТИФИКАТОРОВ, SQL Server создает в том же порядке, как столбец (ORDER BY)Столбец1) в запросе. Кроме того, вставленные данные не соответствует требованиям Начальное значение и ПРИРАЩЕНИЕ требования, указанные в функции УДОСТОВЕРЕНИЯ в запросе (НАЧАЛЬНОЕ ЗНАЧЕНИЕ = 1, INCREMENT = 1).

На самом деле УДОСТОВЕРЕНИЕ функция создает значения идентификаторов правильно на основе начального значения и ПРИРАЩЕНИЯ параметров. Тем не менее, Создание значения идентификаторов происходит до строки сортируются на основе Предложение ORDER BY. Таким образом, при использовании оператор TOP или SET ROWCOUNT оператор, строк, вставленных в результирующей таблице (Новой_таблицы) кажется, что значения неверную идентификацию. Значения идентификаторов SQL Сервер генерирует может не совпадать с параметрами начального значения и ПРИРАЩЕНИЯ УДОСТОВЕРЕНИЕ функция.

Ниже приведен пример, который включает в себя INSERT INTO SELECT FROM с предложением ORDER BY.

Рассмотрим таблицу с именем OldTable со следующими значениями:
Col1      Col2
-------   --------
1         S          
11        F 
7         G          
17        I
2         z


Ниже приведен с именем целевой таблицы Новой_таблицы (Идентификатор является столбцом идентификаторов)
ID (identity)    Col1     Col2
---------------    -------   ------


Следующие INSERT INTO SELECT FROM запроса с помощью предложения ORDER BY будет гарантировать столбца ID в Новой_таблицы в том же порядке, как Столбец1.
INSERT INTO NewTable (Col1, Col2) SELECT Col1, Col2 FROM OldTable ORDER BY Col1 
ID (identity)    Col1     Col2
-------------    ------   ------
1                1         S
2                2         z
3                7         G
4                11        F
5                17        I

Примечание Столбец идентификаторов ID генерируется иметь такой же порядок как Столбец1. Однако INSERT INTO не гарантирует физический порядок либо идентификатор, или Столбец1 в Новой_таблицы. Для получения данных в нужном порядке, предложение ORDER BY является обязательным, как показано в следующей инструкции SELECT:
SELECT * from NewTable ORDER BY ID

Свойства

Код статьи: 273586 - Последний отзыв: 5 июня 2011 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
Ключевые слова: 
kbhowto kbinfo kbpending kbmt KB273586 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:273586

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com