Триггер, который изменяет несколько строк в другой таблице после того, как он был вызван в SQL Server 2005.

Я попытался выполнить обновление таблицы, которое было вызвано обновлением другой таблицы, и получил сообщение об ошибке:

Обновленные или удаленные значения строк либо не делают строку уникальной, либо изменяют несколько строк.

Например, у меня есть эти таблицы:

table_1
===========
int id   (primary_key,identity)
nchar(10)  state_name

table_2
===========
int number

И после обновления table_2 я хочу изменить все значения в столбце «state_name» на «false»

create trigger tr on table_2
after update
as
update table_1 set state_name = 'false'

И когда я пытаюсь обновить table_2, я получаю сообщение об ошибке. Есть ли способ обойти это ограничение?


person zby_szek    schedule 23.05.2009    source источник


Ответы (2)


создать таблицу table_1 (id int identity (1,1) первичный ключ, state_name char (10))

создать таблицу table_2 (число int) перейти

создать триггер tr для table_2 после обновления, поскольку обновление table_1 set state_name = 'false' go

вставить таблицу_1 выбрать «истина» вставить таблицу_2 выбрать 1

go

обновить table_2 установить номер = 2

выберите * из таблицы_1

выберите * из таблицы_2

Какую версию вы используете? Это хорошо сработало в SQL 2K8 и SQL 2K5. Проверьте свой код еще раз.

person Sankar Reddy    schedule 23.05.2009
comment
Он отлично работает, если у вас есть отдельные записи в таблице_2. Попробуйте добавить в него больше единиц. Я видел это в прошлом. - person no_one; 23.05.2009
comment
Я использую SQL 2K5. Вы правы, это работает! Это интересно, потому что я получил это сообщение об ошибке при редактировании записей с помощью Sql Server Managment Studio table_2 -> Open table, и после изменения записи я не смог ее зафиксировать. Интересно, почему. - person zby_szek; 23.05.2009
comment
Более того, когда я добавляю столбец с первичным ключом в table_2, он работает, когда я редактирую записи таким образом table_2->Open table Это должно быть какое-то ограничение Sql Server Management Studio. - person zby_szek; 23.05.2009
comment
››Должно быть какое-то ограничение Sql Server Management Studio. Попробуйте избежать SSMS для этих действий. SSMS известна множеством ошибок, и лучше всего использовать TSQL. - person Sankar Reddy; 24.05.2009

Добавьте ограничение первичного ключа в Table_2 (например, auto inc no), и все будет в порядке.

person no_one    schedule 23.05.2009