bondpuoq
@bondpuoq
Web-программист с недавних пор

Есть ли разница в механизмах работы через интерфейс и через скрипт в MSSQL Server Management Studio?

Все доброго здоровья!

Возникла весьма специфическая проблема в связи с использованием СУБД 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 нового значения может не срабатывать, если есть например кластерный индекс)

Кто сталкивался с таким? Студия поставилась сначала русская (грешу еще на это), переключил на английский - та же картина с ошибкой.
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 1
IamKarlson
@IamKarlson
ASP(?).NET, SQL-разработчик
Включите профайлер и посмотрите как апдейт проходит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы