sql >> Database teknologi >  >> RDS >> Sqlserver

Slet poster i udløseren i stedet for slet

Denne metode burde gøre det trick. En i stedet for trigger vil gøre, hvad du angiver i stedet for at slette automatisk. Det betyder, at det er vigtigt, at du sletter den manuelt, ellers bliver posten ikke slettet. Det vil ikke køre rekursivt. Det kan kun gøres på et bord uden kaskadesletning aktiveret. Grundlæggende er tricket, at du tilslutter dig den originale tabel i id-feltet for at få data fra det felt, du ikke har adgang til, i den slettede pseudotabel.

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

Hvis du kan ændre feltet til varchar(max) eller nvarchar(max), er det dog den bedste løsning. Tekst og ntext er forældet og bør fjernes helt fra SQL Server i næste version.



  1. Hvordan kan jeg forhindre SQL-injektion i PHP?

  2. Rå SQL til SQLAlchemy

  3. Sådan indsætter du liste som parameter fra powershell til SqlPlus

  4. Sådan benchmarker du Moodles ydeevne