Как получить последний вставленный идентификатор на сервере MS SQL с компонентом FireDac?

С FireDac, как получить последний вставленный идентификатор на сервере MS SQL? Спасибо

2 ответа

Сделайте этот идентификатор в столбце идентификаторов, а затем получите его с помощью

SELECT SCOPE_IDENTITY()

после оператора вставки

Пожалуйста, обратитесь по следующим ссылкам

http://msdn.microsoft.com/en-us/library/ms190315.aspx

Используйте автоинкрементный тип поля

http://www.da-soft.com/anydac/docu/Auto-Incremental_Fields.html

Это обеспечит такой код

DataSet.Insert;
.... 
DataSet.Post; 
id := DataSet.FieldByName('ID').AsInteger;

Другим подходом может быть создание правильных операторов SQL, как описано в


Автор AnyDAC также предлагает специальный метод для извлечения инструментов, специфичных для СУБД, через http://docs.embarcadero.com/products/rad_studio/firedac/uADCompClient_TADCustomConnection_GetLastAutoGenValue@String.html

Но все эти постфактумные запросы с SELECT @@identity или же SELECT SCOPE_IDENTITY хрупки и опасны. Когда вы вставляете данные в таблицу A, его триггеры могут вставлять данные в связанные таблицы B и C, а идентичность будет вызывать автоинкенс C, а не таблицу, в которую вы начали вставлять.

Другие вопросы по тегам