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

Откуда: Питер
Сообщений: 55
Всем, привет!

Не специалист в MS SQL...

Есть такой триггер:
ALTER TRIGGER [chem].[TR_Structure_SourceSmiles_INSERT_UPDATE]
ON [chem].[Structure]
AFTER INSERT, UPDATE
AS
SET NOCOUNT ON
IF NOT UPDATE(SourceSmiles)
RETURN;

UPDATE S
SET Smiles = chem.StructureStr2CanonicalSmiles(I.SourceSmiles, 0, 0, 1, 4000),
EncodedMolecule = chem.StructureStr2Binary(I.SourceSmiles, 1, 8000),
SmilesNoStereo = chem.StructureStr2CanonicalSmiles(I.SourceSmiles,1, 1, 1, 4000)
FROM chem.Structure S
join inserted I on s.Id = i.Id
left join deleted D on i.Id = d.Id
WHERE i.SourceSmiles <> d.SourceSmiles or (i.SourceSmiles is null and d.SourceSmiles is not null) or (i.SourceSmiles is not null and d.SourceSmiles is null)

задача триггера: при обновлении или вставке записи нужно по значению поля SourceSmiles обновить другие поля той же записи.

проблема: когда вставляю строку через Insert в MMS нужные поля нормально обновляются.

Когда работает .NET программа, которая испльзует .NET объект SqlBulkCopy, который видимо в свою очередь использует bulk copy внутри себя, триггер не работает - поля не обновляются.

Подскажите, плиз, где косяк?
Может ли быть дело в том, вставляется одна запись или несколько?
Как надо подправить триггер?

Заранее спасибо за помощь.
1 июн 12, 19:18    [12653140]     Ответить | Цитировать Сообщить модератору
 Re: Не работает триггер при добавлении нескольких записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
BULK INSERT (Transact-SQL) ( ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/be3984e1-5ab3-4226-a539-a9f58e1e01e2.htm )
FIRE_TRIGGERS
Specifies that any insert triggers defined on the destination table execute during the bulk-import operation. If triggers are defined for INSERT operations on the target table, they are fired for every completed batch.

If FIRE_TRIGGERS is not specified, no insert triggers execute.
1 июн 12, 19:22    [12653161]     Ответить | Цитировать Сообщить модератору
 Re: Не работает триггер при добавлении нескольких записей  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Гавриленко Сергей Алексеевич, Спасибо!

Гугл подсказывает примеры типа:
SqlBulkCopy bc = new SqlBulkCopy(
System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"],
SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints);

Видимо здесь собака и зарыта - буду пробовать.
1 июн 12, 19:29    [12653184]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить