Mam tabelę, która jest mapowaniem między identyfikatorami obcymi i identyfikatorami lokalnymi.DOWOLNE lub JEŻELI ISTNIEJĄ w T-SQL
Musiałem napisać zapytanie, aby dowiedzieć się, czy ta tabela jest biodem. Wpadłem na ten
IF 1 <> ANY(
SELECT COUNT(foreignId)
FROM mappingTable
GROUP BY localId
)
BEGIN
SELECT 'Oh noes!'
END
ELSE BEGIN
SELECT 'Everything is fine.'
END
Mój przełożony spojrzał na to i skrzywił się i powiedział mi, że powinienem napisać to w zamian:
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
Moje pytanie jest po prostu które z tych pytań jest lepszy styl . Jestem prawie pewien, że są one równoważne.
Dlaczego nie wykorzystać ograniczenia UNIQUE na stole? Podobnie jak UNIQUE (localId, foreignId), dzięki czemu każde mapowanie może być tylko raz odmierzane. Sprawdzanie odbywa się za pomocą silnika bazy danych i nie trzeba pisać żadnego kodu. –
@ JennyO'Reilly Próbuję sprawdzić poprawność danych otrzymanych z zewnętrznych źródeł. –
Następnie stwórz najpierw tabelę i wiązanie, a następnie spróbuj wstawić dane. Twój system DB powinien zgłosić błąd, jeśli dane nie są poprawne. :-) –