Sto provando a creare un trigger di database di base che elimina in modo condizionale le righe da database1.table1 quando viene eliminata una riga da database2.table2. Sono nuovo di trigger e speravo di imparare il modo migliore per farlo. Questo è quello che ho finora. Suggerimenti?SQL Server ON DELETE Trigger
CREATE TRIGGER sampleTrigger
ON database1.dbo.table1
FOR DELETE
AS
IF EXISTS (SELECT foo
FROM database2.dbo.table2
WHERE id = deleted.id
AND bar = 4)
-- If there is a row that exists in database2.dbo.table2
-- matching the id of the deleted row and bar=4, delete
-- it as well.
-- DELETE STATEMENT?
GO
È necessario tenere conto del fatto che il trigger viene attivato ** una volta per istruzione ** (e ** NON ** una volta pe r fila come molti sviluppatori credono) e che la pseudo tabella 'Deleted' potrebbe contenere ** più righe ** (se la tua istruzione ha cancellato più righe) –
@marc_s - Nel sistema, una sola riga potrebbe essere cancellata alla volta (applicazione front-end). Potresti approfondire cosa intendi. È semplice come cambiare 'DOVE id = deleted.id' a' DOVE id IN (SELECT id FROM cancellato) '? –
@ShawnH. Sì, dovrebbe essere così semplice. Credo che Marc significhi che se in qualche modo venisse chiamata una cancellazione di massa da qualche parte, il trigger si sarebbe attivato una sola volta per l'intera istruzione anziché per riga, quindi l'uso di un 'IN' dovrebbe essere risolto in entrambi i casi. – Bridge