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

Откуда:
Сообщений: 34
Есть текстовый файл ~7000 записей. Необходимо загрузить его в таблицу. Использую программу bcp

bcp [bd_test].[dbo].[Filbert_contact_infinity] IN Import.txt -h "FIRE_TRIGGERS" -c -U sa -P qwe;

на таблице Filbert_contact_infinity есть триггер на insert, который вставляет новую запись в другую таблицу.
При запуске, в таблицу Filbert_contact_infinity вставляет все записи корректно, а вот триггер отрабатывает только 1 раз на первую вставляемую запись.
Что не так делаю?
25 июн 14, 09:45    [16215047]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера при использовании программы bcp  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
SaorDual
Что не так делаю?
Ваш триггер написан неверно - он обрабатывает только одну строку из inserted.
25 июн 14, 09:55    [16215100]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера при использовании программы bcp  [new]
SaorDual
Member

Откуда:
Сообщений: 34
CREATE TRIGGER [dbo].[Filbert_contact_infinity_ins] ON [dbo].[Filbert_contact_infinity]
WITH EXECUTE AS CALLER
FOR INSERT
AS
begin
DECLARE @number varchar(32),@dt DATETIME,@state INTEGER,@typ INTEGER;
SELECT @number=number, @dt=dt, @state=state, @typ=typ FROM inserted;

INSERT INTO contact_log (parent_id,r_debt_id,r_phone_id,dt,typ,result,reg_dt)
SELECT person.id parent_id,debt.id r_debt_id,phone.id r_phone_id,@dt,@typ,@state,@dt
FROM
debt JOIN person ON debt.parent_id = person.id
JOIN phone ON person.id = phone.parent_id
WHERE phone.number = @number;
end;


Вот триггер. А как необходимо его написать? Подскажите пожалуйста
25 июн 14, 10:00    [16215147]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера при использовании программы bcp  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
SaorDual,

invm - прав,у вас триггер кривой
25 июн 14, 10:03    [16215164]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера при использовании программы bcp  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
SaorDual
А как необходимо его написать? Подскажите пожалуйста
create trigger [dbo].[Filbert_contact_infinity_ins] ON [dbo].[Filbert_contact_infinity]
with execute as caller
for insert
as
begin
 set nocount on;

 insert into contact_log (parent_id,r_debt_id,r_phone_id,dt,typ,result,reg_dt)
 select n.id, d.id, p.id, i.dt, i.typ, i.state, i.dt
 from
  inserted i join
  phone p on p.number = i.number join
  person n on n.id = p.parent_id join
  debt d on d.parent_id = n.id;
end;
25 июн 14, 10:24    [16215315]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера при использовании программы bcp  [new]
SaorDual
Member

Откуда:
Сообщений: 34
Спасибо, навели на мысль, поправил триггер все работает:
ALTER TRIGGER [dbo].[Filbert_contact_infinity_ins] ON [dbo].[Filbert_contact_infinity]
WITH EXECUTE AS CALLER
FOR INSERT
AS
begin
INSERT INTO contact_log (parent_id,r_debt_id,r_phone_id,dt,typ,result,reg_dt)
SELECT
person.id parent_id,
debt.id r_debt_id,
phone.id r_phone_id,
inserted.dt,
inserted.typ,
inserted.state,
inserted.dt
FROM
debt
JOIN person ON debt.parent_id = person.id
JOIN phone ON person.id = phone.parent_id
JOIN inserted ON inserted.number=phone.number;
end;
25 июн 14, 10:29    [16215359]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить