Ho una tabella che è una mappatura tra ID stranieri e ID locali.ANY o SE ESISTE in T-SQL
Ho dovuto scrivere una query per scoprire se questa tabella è una biiezione. Sono venuto con questo
IF 1 <> ANY(
SELECT COUNT(foreignId)
FROM mappingTable
GROUP BY localId
)
BEGIN
SELECT 'Oh noes!'
END
ELSE BEGIN
SELECT 'Everything is fine.'
END
Il mio supervisore ha preso uno sguardo a questo e fece una smorfia, e mi ha detto che avrei dovuto scrivere questo invece:
IF EXISTS(
SELECT NULL
FROM mappingTable
GROUP BY localId
HAVING COUNT(foreignId) <> 1
)
BEGIN
SELECT 'Oh noes!'
END
ELSE BEGIN
SELECT 'Everything is fine.'
END
La mia domanda è semplicemente quale di queste query è lo stile migliore . Sono abbastanza sicuro che siano equivalenti.
perché non utilizzare un vincolo UNIQUE sul tavolo? Come UNIQUE (localId, foreignId) in modo che ogni mappatura possa essere inserita solo una volta. Il controllo viene eseguito dal motore del database e non è necessario scrivere alcun codice. –
@ JennyO'Reilly Sto cercando di verificare la sanità dei dati ricevuti da fonti esterne. –
Quindi creare prima la tabella e il vincolo e provare successivamente ad inserire i dati. Il tuo sistema DB dovrebbe generare un errore se i dati non sono corretti. :-) –