|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
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. Иначе соболезную. Примерно так
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
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
|
Проблема решена, не был указан первичный ключ в таблице.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка в синтаксисе триггера | 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 |