Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 INSERT & OUTPUT  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Ув. коллеги,

гарантирует ли OUTPUT ту же последовательность ID как в выражении VALUES ?

create table TEST1
(
 ID int identity(1,1) primary key
,T1 varchar(20)
,T2 varchar(20)
)

INSERT TEST1(T1,T2) 
OUTPUT INSERTED.ID
VALUES (NULL,NULL),(1,2),(3,4) --много строк


Т.е. надо быть уверенным, что INSERT выше всегда вернёт 1,2,3 и, например НЕ 2,1,3

Цель данного упражнения: получить и просвоить на клиенте сгенерированые ID.
19 дек 14, 17:56    [17024996]     Ответить | Цитировать Сообщить модератору
 Re: INSERT & OUTPUT  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Alexander Us,
ну так в хелпе все есть
OUTPUT Clause (Transact-SQL)
There is no guarantee that the order in which the changes are applied to the table and the order in which the rows are inserted into the output table or table variable will correspond.
19 дек 14, 18:08    [17025051]     Ответить | Цитировать Сообщить модератору
 Re: INSERT & OUTPUT  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Alexander Us,

и еще там же:

SQL Server does not guarantee the order in which rows are processed and returned by DML statements using the OUTPUT clause
19 дек 14, 18:18    [17025087]     Ответить | Цитировать Сообщить модератору
 Re: INSERT & OUTPUT  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Спасибо всем,

учитывая ваши комментарии переформулирую:

можно ли быть уверенным, что в приведённом мной INSERT строки будкт вставлены в той же последовательности:

т.е.
(NULL,NULL) --> ID = 1
(1,2)--> ID = 2
(3,4)--> ID = 3

и НЕ:
(1,2)--> ID = 1
(NULL,NULL) --> ID = 2
(3,4)--> ID = 3

В таком случае достаточно на клиетне отсортировать ID из OUTPUT и присвоить их строкам клиентской таблицы не занимаясь построковым сравнением.
19 дек 14, 18:28    [17025132]     Ответить | Цитировать Сообщить модератору
 Re: INSERT & OUTPUT  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
В MS SQL нет последовательности строк. Последовательность определяется выражением ORDER BY в запросе.
values (),() не может такого гарантировать, как я понимаю.
20 дек 14, 16:32    [17027881]     Ответить | Цитировать Сообщить модератору
 Re: INSERT & OUTPUT  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4539
Alexander Us
Цель данного упражнения: получить и присвоить на клиенте сгенерированные ID.

К чему этот цирк, если все равно возвращаются записи клиенту после вставки?
Используйте sequential GUID прям на клиенте и не напрягайтесь...Используйте, естественные ключи, если возможно, и - не напрягайтесь...
21 дек 14, 21:36    [17030961]     Ответить | Цитировать Сообщить модератору
 Re: INSERT & OUTPUT  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
buser
Используйте, естественные ключи
Не используйте естественные ключи
22 дек 14, 09:52    [17032270]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить