|
|
|
instead of update & clustered key!
|
|||
|---|---|---|---|
|
#18+
Проблема возникла с SQL2000+SP2 При использовании instead of update триггера для view, если таблица имеет кластерный ключ (primary key или unique constraint) возможно изменить записи в таблице нарушая referential constraint но не вызывая ошибки! Ниже представлен тестовый пример. Не нашел нигде упоминаний об этой багофиче. Может кто-то сталкивался с подобным, или есть более общее описание этой проблемы? create table t1 (f1 int primary key, f2 varchar(100)) go create table t2 ( ff2 varchar(100), f1 int references t1(f1), ff1 uniqueidentifier not null default newid() -- следующая строчка определяет clustered ключ, -- что и приводит к игнорированию constraint'ов primary key clustered) -- если ее заменить на некластерный - получим нормальное -- поведение (constraint violation error) -- primary key nonclustered) go create view v_t2 as select ff1, ff2, f1 from t2 go create trigger iu_v_t2 on v_t2 instead of update as set nocount on set xact_abort on update t2 set ff1 = inserted.ff1, -- уберите предыдущую строчку и получите -- нормальное поведение даже с кластерным ключем ff2 = inserted.ff2, f1 = -1 -- тут специально вызываем constraint violation from inserted where inserted.ff1 = t2.ff1 go insert into t1 values (1,'record1') insert into t2 (ff2,f1) values ('child record1',1) -- следующая команда должна вызвать -- constraint violation error, однако если -- [t2] имеет clustered key - ошибка не возникает!!!!! update v_t2 set ff2 = 'modified child1' select * from v_t2 -- ха-ха! [t2].[f1]=-1 !!! как такое может быть?! go drop view v_t2 go drop table t2 go drop table t1 go ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2002, 12:42:01 |
|
||
|
instead of update & clustered key!
|
|||
|---|---|---|---|
|
#18+
Где-то инфа об этой баге уже проходила... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2002, 13:16:21 |
|
||
|
instead of update & clustered key!
|
|||
|---|---|---|---|
|
#18+
Скорее всего, твой триггер просто не срабатывает, поскольку create view v_t2 должен быть with VIEW_METADATA. Сам когда-то на эти грабли наступил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2002, 13:56:44 |
|
||
|
instead of update & clustered key!
|
|||
|---|---|---|---|
|
#18+
VIEW_METADATA - это другие грабли :) можно и с ним объявить view - тот же эффект. триггер как раз срабатывает, а вот constraint не проверяется! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2002, 14:16:01 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3468&tid=1822453]: |
0ms |
get settings: |
4ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
286ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 562ms |

| 0 / 0 |
