Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 триггер на Insert  [new]
_чайник_
Guest
Доброе утро.
Помогите пожалуйста, в T-SQL я, мягко говоря, не силён.
Нужен триггер который при Insert проверял бы есть-ли добавляемая запись в таблице. Если её нет, то добавить, а если она уже есть, то изменить.
Если можно пример.
Заранее спасибо.
21 апр 05, 10:23    [1485031]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
Веселов Константин
Member

Откуда: Новосибирск
Сообщений: 208
INSTEAD OF INSERT
21 апр 05, 10:24    [1485035]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
если есть, то изменить?
что изменить?как?
если есть запись в таблице?это по всем полям надо проверить, чтоб определить? Если да, то что тогда именять, если все поля одинаковые
21 апр 05, 10:28    [1485053]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Нужен триггер который при Insert проверял бы есть-ли добавляемая запись в таблице. Если её нет, то добавить, а если она уже есть, то изменить.


Эээ... Что это за городушки Вы городите? Зачем это нужно в триггере? Вставка - INSERT, изменение UPDATE. Я бы еще понял, если бы писалась 1 хп на 2 операции. Опишите задачау подробнее.
21 апр 05, 10:29    [1485060]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
> есть-ли добавляемая запись в таблице<
в другой таблице? если да, то скелет триггера такой:

create trigger as

if exists (select * from inserted i inner join t on ...)
update t ... from t inner join inserted on ...
else
insert t () select ...
21 апр 05, 10:32    [1485073]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
_чайник_
Guest
Есть таблица, в ней 2 ключ поля (например id1, id2). В неё добавляется запись с ключами id1=1, id2=2. При добавлении нужно проверить если запись с таковыми ключами в таблице уже есть, то её нужно заменить на добавляемую, а если записи с такими ключами нет, то нужно её добавить.
21 апр 05, 10:36    [1485094]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
если эти 2 ключа у вас primary key, то ошибка вывалится до выполнения триггера, так что бесполезно
21 апр 05, 10:37    [1485099]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
@ndrey
Member

Откуда: Novosibirsk
Сообщений: 343
автор
В неё добавляется запись с ключами ...

А чем добавляется? Если программно, то проще сразу в коде проверять на существование и тогда: UPDATE или INSERT
Или кто-то в ЕМ пытается вставить?
21 апр 05, 10:39    [1485109]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
_чайник_
Guest
Smirnov Anton
если эти 2 ключа у вас primary key, то ошибка вывалится до выполнения триггера, так что бесполезно

О как! Фсё понятно, спасибо...
21 апр 05, 10:39    [1485113]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
_чайник_
Smirnov Anton
если эти 2 ключа у вас primary key, то ошибка вывалится до выполнения триггера, так что бесполезно

О как! Фсё понятно, спасибо...

извини меня, я соврал :(
use tempdb 
go
create table t1(i1 int primary key, v int)
go
create trigger trtmp on t1
instead of insert
as
begin
set nocount on
update tt1
 set tt1.v=i.v
  from t1 tt1 join inserted i on tt1.i1=i.i1
insert into t1(i1,v) 
 select i.i1,i.v from inserted i
  where i1 not in (select i1 from t1)
end
go
insert into t1
select 1, 1
union all
select 2, 2 
select * from t1
insert into t1
select 1, 3
union all
select 2, 4 
union all
select 3, 5 
select * from t1
drop table t1
почему то был твёрдо уверен в этом :(
21 апр 05, 10:44    [1485130]     Ответить | Цитировать Сообщить модератору
 Re: триггер на Insert  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
_чайник_
Есть таблица, в ней 2 ключ поля (например id1, id2). В неё добавляется запись с ключами id1=1, id2=2. При добавлении нужно проверить если запись с таковыми ключами в таблице уже есть, то её нужно заменить на добавляемую, а если записи с такими ключами нет, то нужно её добавить.


Выполняйте такие проверки в хп.
21 апр 05, 10:46    [1485138]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить