Правильные способы узнать id после INSERT в MS SQL 2012
От: Michael7 Россия  
Дата: 16.04.16 12:45
Оценка:
Вот что стоило разработчикам SQL позволить INSERT возвращать значения автоинкрементируемых полей после вставки? Лишнего геморойства было бы меньше. Пока что вижу три способа узнать значение автоикремента и не знаю какой самый правильный.

1) Так сейчас делаю. После вставки сразу SELECT Where по вставленным полям и получаю id записи. Минус: если найденных записей несколько — нет гарантии, что у вставленной записи максимальный номер. Параллельно могла произойти еще одна вставка и вообще у автоинкрементного поля кажется гарантируется только уникальность, но не возрастание. Впрочем, тут могу ошибаться. На практике однако часто это не существенно или не случается.

2) Использовать SCOPE_IDENTITY() Минус тот же. Нет гарантии, что никто не добавил запись.

3) Триггер на вставку в таблицу, который пишет id в отдельную таблицу. Можно запутаться

В принципе есть еще вариант. Отказаться от автоинкремента, но оставить ограничение на уникальность и самому присваивать id, если возникнет ошибка неуникальности, значит, кто-то параллельно добавил и надо просто продолжать добавлять записи с id++ пока не добавится.

Вот как корректнее всего даже и не знаю. А может я и вовсе чего-то не понял.
mssql insert
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.