Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Без триггеров. Добавление значения ключа  [new]
Siberia
Guest
Привет.

Я пишу на VB многопользовательский клиент
Есть две таблицы. Необходимо вставить ПОСЛЕДНЕЕ значение ключа первой таблицы другую. Только без применения триггера.

у меня есть идея сделать хранимую
типа:

SET @ID = SELECT TOP 1 FROM TABLE1 ORDER BY ID DESC

INSERT TABLE2 @ID,'record'

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

Правильна ли моя идея либо можно сделать элегантнее и проще?
17 сен 03, 14:52    [342658]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
так вставку в таблицы оберхи в ХП и не выдумывай сложности
17 сен 03, 14:55    [342669]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
bushmen
Member

Откуда: г. Москва
Сообщений: 828
А чем тебе триггер помешал? Зато, если изменятся условия вставки, не надо будет клиента перекомпилить
17 сен 03, 14:55    [342671]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
Siberia
Guest
Пишу на Аксессе. Там триггер работает нормально, но при этом открытый рекордсет на TABLE1 не обновляется корректно. Он не обновляется даже в Enterprise Manager.
Поэтому решил плюнуть и делать так.
В хранимой, конечно, но мне важна сейчас блокировка или более изящный путь.
17 сен 03, 14:59    [342688]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
bushmen
Member

Откуда: г. Москва
Сообщений: 828
тогда тебе на форум access'ников
17 сен 03, 15:08    [342712]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
если акцесс, то в триггерах set nocount on как отче наш
17 сен 03, 15:11    [342721]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
Siberia
Guest
Не помогает SET NOCOUNT ON

А все-таки, как это сделать с учетом вышеприведенного?
17 сен 03, 15:23    [342758]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
Glory
Member

Откуда:
Сообщений: 104760
А все-таки, как это сделать с учетом вышеприведенного?

Открывать транзакцию и эксклюзивно блокировать таблицу.

Не помогает SET NOCOUNT ON
А вы уверены, что поставили его в нужном месте ?
17 сен 03, 15:26    [342771]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
Емельянов Константин
Member

Откуда: Николаев
Сообщений: 14
Лучше вместо:
SET @ID = SELECT TOP 1 FROM TABLE1 ORDER BY ID DESC
INSERT TABLE2 @ID,'record'

Сделайте хп для втавки записи в первую таблицу, которая будет возвращать @@identity втавленной записи:
inset into table1 () values ....
return @@identity

а потом используйте его как заблогорассудится.
Но я уверен что в аксесе есть собстевенные средства для отслеживания идентификатора вставленной записи. Скорее всего можно сделать связанные таблицы и он сам будет отслеживать все связи и проставлять в подчиненную таблицу идентификатор родительской записи.
17 сен 03, 15:46    [342821]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
user007
Guest
только не увлекайтесь блокировками, при неправильном использовании получете тормознутую БД.
begin tran

SET @ID = SELECT TOP 1 FROM TABLE1 with(xlock) ORDER BY ID DESC
INSERT TABLE2 @ID,'record'
commit


Возможно ваша задача решается другим способом
begin tran

INSERT TABLE2 @ID,'record'
SET @ID = @@identity
...
commit
17 сен 03, 16:32    [342938]     Ответить | Цитировать Сообщить модератору
 Re: Без триггеров. Добавление значения ключа  [new]
Mik Prokoshin
Member

Откуда: Барнаул
Сообщений: 1240
Если делаете через АДО, то после AddNew+Update Вы получите значение вставленного ключа в соотв. поле. Т.е. это можно делать на клиенте.
17 сен 03, 16:45    [342980]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить