Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как в триггере for insert переопределить значение одного из полей?  [new]
Icq-оператор
Member

Откуда:
Сообщений: 11
Как в триггере for insert переопределить значение одного из полей?
которое по совместительству еще и примари ки, но не идентити... хотя это не важно...

например,

CREATE TRIGGER ti_MyTable
ON MyTable
FOR INSERT
AS
begin
declare
@paramid int
select @paramid = i.ParamId from inserted i
if(@paramid is null)
begin
select @paramid = max(ParamId)+1 from MyTable
end
update inserted set paramid = @paramid
end

при компиляции возникает эксепшн

Server: Msg 286, Level 16, State 2, Procedure ti_MyTable,
The logical tables INSERTED and DELETED cannot be updated.
3 дек 04, 15:57    [1156801]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере for insert переопределить значение одного из полей?  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Поставит глобальный флажок от зацикливания.

Вызвать обычный апдейт исходной таблицы с нужным значением.

ы ?
3 дек 04, 15:58    [1156807]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере for insert переопределить значение одного из полей?  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
изобретение собственного IDENTITY очень часто встречается на форуме
но вот чтоб он ещё и PK был
я не уверен, что вам дадут вставить в таблицу PK = NULL, ибо вставка проходит раньше, чем триггер сработает,
если только попробовать c INSTEAD of INSERT
3 дек 04, 16:06    [1156851]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере for insert переопределить значение одного из полей?  [new]
Icq-оператор
Member

Откуда:
Сообщений: 11
точно. не дает! и INSTEAD of INSERT тоже не спасает
3 дек 04, 16:18    [1156931]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере for insert переопределить значение одного из полей?  [new]
Icq-оператор
Member

Откуда:
Сообщений: 11
фик с ним с первичным ключом.... а вообще, "вставляемое значение поля" в триггере как-нибудь переопределить можно??
3 дек 04, 16:20    [1156941]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере for insert переопределить значение одного из полей?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Можно. Связав inserted с базовой таблицей.
3 дек 04, 16:23    [1156956]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере for insert переопределить значение одного из полей?  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
да, конечно
если просто for inserte, то записи из inserted уже вставлены в таблицу, просто транцакция не завершена, и можно написать примерно следующее
update t1
set t1.field1 = t2.field+1;
from MyTable t1 join inserted t2 on t1.pk = t2.pk

ваш принцип
автор
select @paramid = max(ParamId)+1 from MyTable

можно просто применить лишь для вставки одной записи, а со множественной вставкой придётся повозиться
(такая тема была несколько дней назад)
3 дек 04, 16:25    [1156971]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить