У меня есть таблица, которая представляет собой сопоставление между иностранными идентификаторами и локальными идентификаторами.ЛЮБЫЕ ИЛИ ПОВТОРНЫЕ СУЩЕСТВУЮЩИЕ В T-SQL
Мне пришлось написать запрос, чтобы узнать, является ли эта таблица биекцией. Я придумал этот
IF 1 <> ANY(
SELECT COUNT(foreignId)
FROM mappingTable
GROUP BY localId
)
BEGIN
SELECT 'Oh noes!'
END
ELSE BEGIN
SELECT 'Everything is fine.'
END
Мой руководитель взял один взгляд на это и скривился, и сказал мне, что я должен был бы написать вместо этого:
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
Мой вопрос просто, какой из этих запросов лучше стиль , Я почти уверен, что они эквивалентны.
Почему бы не использовать ограничение уникальности на столе? Подобно UNIQUE (localId, foreignId), так что каждое сопоставление может быть только однократно вставлено. Проверка выполняется движком базы данных, и вам не нужно писать какой-либо код. –
@ JennyO'Reilly Я пытаюсь проверить разумность данных, полученных из внешних источников. –
Затем создайте таблицу и ограничение сначала и попробуйте вставить данные впоследствии. Ваша система БД должна выдать ошибку, если данные неверны. :-) –