sql >> データベース >  >> RDS >> Sqlserver

変数との間の IN 演算子の SQL 代替

    テーブル変数 (プロシージャまたは関数の一部である場合はパラメーター) を宣言し、not in に使用できます。 一部:

    DECLARE @NotIn table (
        NotInValues int
    )
    
    INSERT INTO @NotIn Values
    ('00009000'),
    ('00009900'),
    ('00009906')
    

    次のようにコードで使用します:

    where [Location Code] between '0000' and '0040' 
    and [Item No_] not IN (select NotInValues from @NotIn) 
    and Gutschrift = '1' 
    and [Document Date] between @Start and @Ende    
    

    注 1: 多数の値の場合、not exists は not in よりもパフォーマンスが優れている可能性があります

    注 2: ストアド プロシージャの一部である場合は、ユーザー定義のテーブル型を作成し、それを使用してテーブル値パラメーターを宣言する必要があります。また、テーブル値パラメーターは読み取り専用であるため、それらに対して DML ステートメント (挿入/更新/削除) を実行するとエラーが発生します。

    UDT を作成するには:

    CREATE TYPE IntegerList As Table
    (
        IntValue int
    )
    

    ストアド プロシージャのパラメーター リストで宣言するには:

    CREATE PROCEDURE procedureName
    (
       @IntList dbo.IntegerList READONLY
       -- Note that the readonly must be a part of the parameter declaration.
    )
    



    1. ExecuteNonQueryで影響を受ける行を取得する

    2. PostgreSQLのトリガー関数の動的クエリ

    3. mysqlを使用して1つのテーブルから別のテーブルに欠落しているレコードを挿入します

    4. MySQLデータベースへのデータのインポート