Все доброго здоровья!
Возникла весьма специфическая проблема в связи с использованием СУБД MS SQL Server Management Studio 12.0.4100.1
Предыстория:
1) Я создал триггер на update-операцию для таблицы, триггер осуществлял просто логгирование обновляемых данных в таблицу лога, скрипт примерно такой:
ALTER trigger [dbo].[refKartParams_ins_trigger] on [dbo].[RefKartParams]
for insert,update
as
begin
if (not exists (select 1 from deleted where id in (select id from inserted)))
begin
insert into dbo.RefKartParams_log
(ParamType
,PartName
,FormForEditName
,Tablename
,DateType
,idChangedParam
,typeOfChange)
select ParamType
,PartName
,FormForEditName
,Tablename
,DateType
,id
,'ins'
from inserted
end
else
begin
insert into dbo.RefKartParams_log
(ParamType
,PartName
,FormForEditName
,Tablename
,DateType
,idChangedParam
,typeOfChange)
select ParamType
,PartName
,FormForEditName
,Tablename
,DateType
,id
,'upd'
from inserted
end
end
2) Решил проверить, открыл таблицу в редакторе, через правую кнопку по таблице - "изменить"
3) Отредактировал данные, нажал Enter. После чего получил ошибку "The row value(s) updated or deleted either do not make the row unique or they alter multiple rows(2 rows)"
4) Удивился. Ведь в таблице логов у меня нет проверки на уникальность вставляемых данных (это ж лог!), есть только уникальный ID записи в логе (хотя ошибка появлялась и до того, как я его сделал). Если триггер отключить, то ошибки не выводит, все спокойно редактит.
А теперь, чудесатые чудеса, если просто открыть окошко и написать в нем скрипт обновления какой-нибудь строки - то все срабатывает - строка обновляется и изменения попадают в лог как и должны.
"Даст ис фантастиш!" подумал я и написал этот вопрос на Тостер.
Может быть есть различия работы интерфейсного метода обновления данных в строках и скриптового?
(Есть подозрения, что фишка в том, что когда делаешь update ... set DateType=... where id=... из скрипта, то срабатывает операция update, а если из интерфейса то delete + insert, а если insert не канает, то срабатывает откат всей транзакции rollback tran, а insert нового значения может не срабатывать, если есть например кластерный индекс)
Кто сталкивался с таким? Студия поставилась сначала русская (грешу еще на это), переключил на английский - та же картина с ошибкой.