Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 2000.Триггер.Переименовка таблицы  [new]
cherox
Member

Откуда: Новосибирск
Сообщений: 97
Есть Microsoft SQL Server 2000 - 8.00.2187 (Intel X86) Mar 9 2006 11:38:51 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Для аналитических целей с боевого сервера на него копируется база с переименовкой таблиц базы (переименовывается префикс/название фирмы, Navision)..

Есть триггеры на таблицах и почему-то триггер все равно ссылается на некий старый объект, помогает только перекомпиляция тригерров

Например падает:
if object_ID('dbo.Temp0') is not null drop table dbo.Temp0;
if object_ID('dbo.Temp') is not null drop table dbo.Temp;
if object_ID('dbo.Temp2') is not null drop table dbo.Temp2;
go
create table dbo.Temp (ID int);
create table dbo.Temp2 (ID int);
go
create trigger dbo.tI_Temp on dbo.Temp for insert
as
begin
	insert into dbo.Temp2 (ID)
	select 2*ID from inserted
end
go
insert into dbo.Temp values (2);

select * from dbo.Temp
select * from dbo.Temp2
go

sp_rename 'dbo.Temp', 'Temp0', 'Object'
go
insert into dbo.Temp0 values (6);

select * from dbo.Temp0
select * from dbo.Temp2
go

если после переименования таблицы добавим alter trigger - все начинает работать (дополнительная переименовка триггеров ситуацию не спасает)..

if object_ID('dbo.Temp0') is not null drop table dbo.Temp0;
if object_ID('dbo.Temp') is not null drop table dbo.Temp;
if object_ID('dbo.Temp2') is not null drop table dbo.Temp2;
go
create table dbo.Temp (ID int);
create table dbo.Temp2 (ID int);
go
create trigger dbo.tI_Temp on dbo.Temp for insert
as
begin
	insert into dbo.Temp2 (ID)
	select 2*ID from inserted i
end
go
insert into dbo.Temp values (2);

select * from dbo.Temp
select * from dbo.Temp2
go

sp_rename 'dbo.Temp', 'Temp0', 'Object'
go
alter trigger dbo.tI_Temp on dbo.Temp0 for insert
as
begin
	insert into dbo.Temp2 (ID)
	select 2*ID from inserted
end
go
insert into dbo.Temp0 values (6);

select * from dbo.Temp0
select * from dbo.Temp2
go

На 2005 всё работает и без передергивания триггера..

Может есть решение по рефрешу триггеров под 2000? Либо только перебор триггеров и их alter (чего как-то не хочется)?
18 авг 11, 09:47    [11137277]     Ответить | Цитировать Сообщить модератору
 Re: 2000.Триггер.Переименовка таблицы  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
sp_recompile
18 авг 11, 10:46    [11137711]     Ответить | Цитировать Сообщить модератору
 Re: 2000.Триггер.Переименовка таблицы  [new]
cherox
Member

Откуда: Новосибирск
Сообщений: 97
нет, sp_recompile не помогает..

что
...
sp_rename 'dbo.Temp', 'Temp0', 'Object'
go
sp_recompile 'dbo.Temp0'
go
insert into dbo.Temp0 values (6);
...

что
...
sp_rename 'dbo.Temp', 'Temp0', 'Object'
go
sp_recompile 'dbo.tI_Temp'
go
insert into dbo.Temp0 values (6);
...

не спасают от ругачки..
18 авг 11, 11:08    [11137953]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить