Quando si crea una stored procedure che si inserisce in una tabella di collegamento semplice, dovrebbe controllare se esistono i FK e restituire con garbo un errore o semplicemente lasciare che SQL lanci un'eccezione?Procedura consigliata per la procedura memorizzata? Dovrebbero controllare se esistono chiavi esterne prima di inserire?
- Qual è la migliore pratica?
- Cosa è più efficiente?
Solo nel caso qualcuno non capisce la mia domanda:
Table A
Table B
Table AB
devo fare:
IF EXISTS(SELECT 1 FROM A WHERE Id = @A) AND EXISTS(SELECT 1 FROM B WHERE Id = @B)
BEGIN
INSERT AB (AId,BId) VALUES (@A, @B)
END
ELSE
--handle gracefully, return error code or something
o
INSERT AB (AId,BId) VALUES (@A, @B)
e lasciare SQL un'eccezione
Grazie
Se si è preoccupati per le prestazioni e si prevedono molte violazioni delle chiavi esterne, consultare [Impatto sulle prestazioni delle diverse tecniche di gestione degli errori] (http://sqlperformance.com/2012/08/t-sql-queries/gestione degli errori) e misurare l'impatto sul proprio database e hardware. –