Questo metodo dovrebbe fare il trucco. Un trigger invece di farà tutto ciò che specifichi invece di eseguire automaticamente l'eliminazione. Ciò significa che è fondamentale eliminarlo manualmente o il record non verrà eliminato. Non verrà eseguito in modo ricorsivo. Può essere eseguito solo su una tabella senza l'eliminazione a cascata abilitata. Fondamentalmente il trucco è unirti alla tabella originale nel campo id per ottenere i dati dal campo a cui non hai accesso nella pseudotabella eliminata.
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 puoi cambiare il campo in varchar(max) o nvarchar(max) questa è la soluzione migliore. Text e ntext sono obsoleti e dovrebbero essere rimossi del tutto da SQL Server nella versione successiva.