Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2013, 16:34   #1
Кристина *
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 15
По умолчанию Ошибка при срабатывании триггера

Здравствуйте. Необходимо создать триггер на обновление двух таблиц: при изменении поля таблицы Books меняется соответствующее поле таблицы Registration. Пыталась создавать несколько вариантов, проблема в том, что при выполнении команды UPDATE Books SET (...) триггер срабатывает верно, однако при попытке внести изменения непосредственно в таблицу Books появляется ошибка: " ... Сведение об ошибке: Значения строки обновлены или удалены, либо не делают строку уникальной, либо они изменяют несколько строк (строк: 2)".
Вот текст одного из примеров триггера:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Триггер_upd]
ON [dbo].[Books] FOR UPDATE
AS
DECLARE @k int, @s varchar, @x int
SELECT @k=bCode, @s=bName
FROM inserted
SET @x=(SELECT rCode FROM Registration WHERE rbCode=@k)
IF @x<>0
BEGIN
UPDATE Registration
SET rbName=@s
WHERE rCode=@x
END

"... либо они изменяют несколько строк (строк: 2)" - это потому, что меняются 2 строки - одна в таблице Books, другая в Registration? И если так, то это и требуется, как исправить?
Кристина * вне форума Ответить с цитированием
Старый 16.05.2013, 17:01   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если командой UPDATE выполняется обновление нескольких записей, то триггер на обновление отработает один раз сразу для всех обновленных записей, а не для каждой в отдельности. Соответственно в inserted и deleted тоже будет по несколько записей. От этого в триггере и плясать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.05.2013, 17:08   #3
Кристина *
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 15
По умолчанию

Можно подробней, пожалуйста) Не очень поняла
Кристина * вне форума Ответить с цитированием
Старый 16.05.2013, 19:29   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

rCode это видимо идентификатор записи. Надеюсь это так и он не меняется при UPDATE. Иначе соболезную. Примерно так

Код:
UPDATE Registration 
  SET rbName=I.bName
  FROM Inserted I,Deleted D,Registration R
  WHERE I.rCode=D.rCode AND I.bName<>D.bName AND I.rCode=R.rCode
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.05.2013, 19:53   #5
Кристина *
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 15
По умолчанию

Все равно эта ошибка. Не дает изменить в таблице. Такую же ошибку выдает триггер на удаление.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Триггер_2]
ON [dbo].[Registration] FOR DELETE
AS
IF @@ROWCOUNT=1
BEGIN
DECLARE @y INT
SELECT @y=rbCode
FROM deleted
UPDATE Books
SET bCopyes=bCopyes+1
WHERE bCode=@y
END

А триггер на добавление (практически аналогичный) работает без ошибок.

Последний раз редактировалось Кристина *; 16.05.2013 в 20:15.
Кристина * вне форума Ответить с цитированием
Старый 17.05.2013, 12:18   #6
Кристина *
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 15
По умолчанию

Проблема решена, не был указан первичный ключ в таблице.
Кристина * вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в синтаксисе триггера lawliet93 SQL, базы данных 2 23.12.2012 18:45
Переход на определенное число при срабатывании гиперссылки sergantikus Microsoft Office Excel 6 11.02.2011 08:18
ошибка в написании триггера. Rin БД в Delphi 8 31.01.2011 14:53
Зависает документ при срабатывании макроса Quatro_Drive Microsoft Office Excel 6 22.09.2009 23:21
ощибка при создании триггера, помогите tarakan1983 SQL, базы данных 2 30.10.2008 13:39