1. ホーム
  2. sql

[解決済み] T-SQLで両方がNULLの値を比較する方法

2023-05-24 11:22:50

質問

テーブルに重複した行を挿入していないことを確認したいです (例: 主キーだけが異なる場合)。 私は null を "すべての値" を意味すると決めたので、私のすべてのフィールドは NULLS を許可します。 NULLのために、私のストアドプロシージャの次のステートメントは動作しません。

IF EXISTS(SELECT * FROM MY_TABLE WHERE 
    MY_FIELD1 = @IN_MY_FIELD1  AND
    MY_FIELD2 = @IN_MY_FIELD2  AND
    MY_FIELD3 = @IN_MY_FIELD3  AND 
    MY_FIELD4 = @IN_MY_FIELD4  AND
    MY_FIELD5 = @IN_MY_FIELD5  AND
    MY_FIELD6 = @IN_MY_FIELD6)
    BEGIN
        goto on_duplicate
    END

NULL = NULL は真ではないので。

すべての列にIF IS NULLステートメントを持たずに、重複をチェックするにはどうしたらよいでしょうか。

どのように解決するのですか?

使用方法 INTERSECT 演算子を使用します。

それは NULL -であり、すべてのフィールドに複合インデックスがあれば効率的です。

IF      EXISTS
        (
        SELECT  MY_FIELD1, MY_FIELD2, MY_FIELD3, MY_FIELD4, MY_FIELD5, MY_FIELD6
        FROM    MY_TABLE
        INTERSECT
        SELECT  @IN_MY_FIELD1, @IN_MY_FIELD2, @IN_MY_FIELD3, @IN_MY_FIELD4, @IN_MY_FIELD5, @IN_MY_FIELD6
        )
BEGIN
        goto on_duplicate
END

もし UNIQUE インデックスを作成すれば、よりシンプルになります。