Este método deve fazer o truque. Um acionador em vez de fará o que você especificar em vez de excluir automaticamente. Isso significa que é fundamental que você faça a exclusão manualmente ou o registro não será excluído. Ele não será executado recursivamente. Isso só pode ser feito em uma tabela sem a exclusão em cascata habilitada. Basicamente, o truque é você se juntar à tabela original no campo id para obter os dados do campo ao qual você não tem acesso na pseudotabela excluída.
create table dbo.mytesting (test_id int, sometext text)
go
create table dbo.myaudit (test_id int, sometext text)
go
insert into dbo.mytesting
values (1, 'test')
go
Create Trigger audit_Table_Deletes on dbo.mytesting INSTEAD OF delete
as
if @@rowcount = 0 return;
Insert into dbo.myaudit (test_id, sometext)
Select d.test_id, t.sometext from deleted d
join dbo.mytesting t on t.test_id = d.test_id
Delete dbo.mytesting where test_id in (select test_id from deleted)
go
delete dbo.mytesting where test_id = 1
select * from dbo.mytesting
select * from dbo.myaudit
Go
drop table dbo.mytesting
drop table dbo.myaudit
Se você puder alterar o campo para varchar(max) ou nvarchar(max), essa é a melhor solução. Text e ntext estão obsoletos e devem ser removidos completamente do SQL Server na próxima versão.