結合を使用して両方のテーブルから値を選択する 2 つのテーブルがあるtest1
とします。test2
私の要件は次のとおりです。2 つのテーブルを結合するときに、test1
データが含まれているが対応するデータが に見つからないtest2
場合、クエリは例外をスローする必要があります。
これはどのように達成できますか?
結合を使用して両方のテーブルから値を選択する 2 つのテーブルがあるtest1
とします。test2
私の要件は次のとおりです。2 つのテーブルを結合するときに、test1
データが含まれているが対応するデータが に見つからないtest2
場合、クエリは例外をスローする必要があります。
これはどのように達成できますか?
RAISEERRORが必要です
左結合を行い、右側がヌルの場所を選択します。カウント > 0 の場合、例外をスローします。
DECLARE @count INT
SELECT
@count = COUNT(*)
FROM
test1 t1
LEFT JOIN test2 t2
ON t1.t1_join_col = t2.t2_join_col
WHERE
t2.t2_join_col IS NULL -- find where we have test1 data but not test2 data
-- Check if I need to raise an error
IF @count <> 0
RAISERROR (N'<<%7.3s>>', -- Message text.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: << abc>>.
一致しない結果を返す必要がある場合は、次の ELSE を追加します
ELSE
SELECT
... cols you want
FROM
test1 t1
LEFT JOIN test2 t2
ON t1.t1_join_col = t2.t2_join_col
クエリを 1 回だけ実行したい場合は、常に結果を一時テーブルに入れてそれをカウントし、それを返すこともできます。