Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Insert Into и блокировка


Автор: Martin_8 27.4.2008, 23:29
Здравствуйте, помогите разобраться в следующей ситуации. 
Имеется SQL запрос, который работая через ADOQuery, добавляет информацию в таблицу. Программа представляет собой клиент-серверное приложение. СУБД – SQL Server 2000. Запрос имеет вид:
Код

Insert Into XX (A,B,C) Values (:p_A, :p_B, :p_C)

Таблица XX имеет поля 
Id, A, B, C
Поле Id представляет собой Identity (автоинкремент) , поэтому оно не используется в запросе. 

После выполнения запроса, мне необходимо определить под каким номером (под каким Id) была добавлена эта запись. Изначально я думал, что это можно определить, следующим выбором 
Код

Select max(Id) from XX  

Но в промежутке между запросом Insert Into, и запросом Select определяющем максимальное значение Id, может быть выполнен другой (второй) запрос Insert Into и Select первого запроса сделает выборку изменённых данных.

Подскажите, пожалуйста, как правильно наложить блокировку и как должен выглядеть запрос для моего случая.

Автор: Itsys 27.4.2008, 23:34
Код

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'


После выполнения, соответсвенно будет одна колонка с обним значением - вставленного идентификатора - выполняешь, как один запрос.

Автор: Martin_8 27.4.2008, 23:40
Itsys, Спасибо за ответ  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)