私は外部IDとローカルIDの間のマッピングであるテーブルを持っています。T-SQLの存在または存在する場合
このテーブルがバイジェクションであるかどうかを調べるクエリを作成する必要がありました。私はこの時に1人のを見ていたし、grimaced上司この
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制約を使用しないのはなぜ? UNIQUE(localId、foreignId)と同様に、各マッピングは一度しかインセプトできません。チェックはデータベースエンジンによって行われ、コードを書く必要はありません。 –
@ JennyO'Reilly私は外部から受け取ったデータの健全性をチェックしようとしています。 –
次に、テーブルと制約を最初に作成し、その後にデータを挿入してみます。データが正しくない場合、DBシステムはエラーをスローする必要があります。 :-) –