Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 порядок назначения identity при insert+select+order by  [new]
tunknown
Member

Откуда:
Сообщений: 776
Не удалось найти в BOL, где описано поведение присвоения identity(1,1), когда выполняется insert+select+order by.
Будет ли его заполнение соответствовать order by? При наличии кластерного/некластерного/отсутствующего индекса по identity полю? Интересует только значение поля с identity.

На blogs.msdn.com такое описывают для 2005 безотносительно индексов, но это не BOL. Интересует любое официальное упоминание для sql 2005 и выше.
23 сен 15, 16:12    [18185902]     Ответить | Цитировать Сообщить модератору
 Re: порядок назначения identity при insert+select+order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
tunknown,

здесь это обсуждалось, но я нахожу только отсыревшие ссылки на MSDN.
Однако прекрасно помню, что гарантируется порядок вставляемых IDENTITY
функцией IDENTITY(), которая возможна только в SELECT ... INTO ...,
в соответствии с ORDER BY
23 сен 15, 16:24    [18185959]     Ответить | Цитировать Сообщить модератору
 Re: порядок назначения identity при insert+select+order by  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
tunknown,


https://support.microsoft.com/en-us/kb/273586
When you use a SELECT INTO query with the IDENTITY function and an ORDER BY clause, the identity values that are generated are not guaranteed to have the same order as the order that is provided by the ORDER BY clause. For example, if the IDENTITY function starts with a seed of 1 and an increment of 1, the first row in the ordered result set could have a value different than 1, and the second row may have a value different than 2, and so forth.While the ordering may appear as you expect, the behavior is not guaranteed. The presence of TOP or SET ROWCOUNT also does not guarantee the order of the rows.

If you want the IDENTITY values to be assigned in a sequential fashion that follows the ordering in the ORDER BY clause, create a table that contains a column with the IDENTITY property and then run an INSERT .. SELECT … ORDER BY query to populate this table.
23 сен 15, 16:26    [18185979]     Ответить | Цитировать Сообщить модератору
 Re: порядок назначения identity при insert+select+order by  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Shakill, хотя эта статья тоже старовата
23 сен 15, 16:28    [18185988]     Ответить | Цитировать Сообщить модератору
 Re: порядок назначения identity при insert+select+order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Shakill
tunknown,


https://support.microsoft.com/en-us/kb/273586
When you use a SELECT INTO query with the IDENTITY function and an ORDER BY clause, the identity values that are generated are not guaranteed to have the same order as the order that is provided by the ORDER BY clause. For example, if the IDENTITY function starts with a seed of 1 and an increment of 1, the first row in the ordered result set could have a value different than 1, and the second row may have a value different than 2, and so forth.While the ordering may appear as you expect, the behavior is not guaranteed. The presence of TOP or SET ROWCOUNT also does not guarantee the order of the rows.

If you want the IDENTITY values to be assigned in a sequential fashion that follows the ordering in the ORDER BY clause, create a table that contains a column with the IDENTITY property and then run an INSERT .. SELECT … ORDER BY query to populate this table.
Я наврал, значит
23 сен 15, 16:31    [18186007]     Ответить | Цитировать Сообщить модератору
 Re: порядок назначения identity при insert+select+order by  [new]
tunknown
Member

Откуда:
Сообщений: 776
Спасибо.

здесь есть ещё информация, опять неофициальная

на code.msdn.microsoft.com более поздний повтор и тоже не ясно, можно ли считать официальнм
24 сен 15, 15:10    [18190250]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить