Как получить последний вставленный идентификатор на сервере MS SQL с компонентом FireDac?
С FireDac, как получить последний вставленный идентификатор на сервере MS SQL? Спасибо
2 ответа
Сделайте этот идентификатор в столбце идентификаторов, а затем получите его с помощью
SELECT SCOPE_IDENTITY()
после оператора вставки
Пожалуйста, обратитесь по следующим ссылкам
Используйте автоинкрементный тип поля
http://www.da-soft.com/anydac/docu/Auto-Incremental_Fields.html
Это обеспечит такой код
DataSet.Insert;
....
DataSet.Post;
id := DataSet.FieldByName('ID').AsInteger;
Другим подходом может быть создание правильных операторов SQL, как описано в
- http://en.wikipedia.org/wiki/Insert_(SQL)
- SQL Server - возвращаемое значение после INSERT
- Лучший способ получить идентичность вставленной строки?
Автор AnyDAC также предлагает специальный метод для извлечения инструментов, специфичных для СУБД, через http://docs.embarcadero.com/products/rad_studio/firedac/uADCompClient_TADCustomConnection_GetLastAutoGenValue@String.html
Но все эти постфактумные запросы с SELECT @@identity
или же SELECT SCOPE_IDENTITY
хрупки и опасны. Когда вы вставляете данные в таблицу A, его триггеры могут вставлять данные в связанные таблицы B и C, а идентичность будет вызывать автоинкенс C, а не таблицу, в которую вы начали вставлять.