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

ANSI_NULLS と QUOTED_IDENTIFIER は物事を殺しました。それらは何のため?

    OK、アプリケーション開発者の観点から、これらの設定が行うことは次のとおりです:

    QUOTED_IDENTIFIER

    この設定は、引用符 ".." の使用方法を制御します SQL コンパイラによって解釈されます。 QUOTED_IDENTIFIER の場合 が ON の場合、引用符は括弧のように扱われます ([...] ) であり、テーブル名、列名などの SQL オブジェクト名を引用するために使用できます。OFF (推奨されません) の場合、引用符はアポストロフィ ('..') のように扱われます。 ) であり、SQL コマンドでテキスト文字列を引用するために使用できます。

    ANSI_NULLS

    この設定は、IS 以外の比較演算子を使用しようとしたときの動作を制御します NULL で。 ON の場合、これらの比較は、NULL との比較は常に失敗し (値ではなく、フラグであるため)、FALSE を返すという標準に従います。 .この設定がオフの場合 (実際には そうではありません 推奨) 値のように正常に処理し、 = を使用できます 、 <> などで、適切に TRUE を返します。

    これを処理する適切な方法は、代わりに IS を使用することです (ColumnValue IS NULL .. ).

    CONCAT_NULL_YIELDS_NULL

    この設定は、文字列式で使用される場合に NULL を「伝達」するかどうかを制御します。この設定がONの時は、規格通り 'some string' + NULL .. のような式になります。 常に NULL を返します。したがって、一連の文字列連結では、1 つの NULL によって式全体が NULL を返す可能性があります。これをオフにすると (これも推奨されません)、NULL が代わりに空の文字列のように扱われるため、'some string' + NULL 'some string' と評価されるだけです .

    これを処理する適切な方法は、COALESCE (または ISNULL) 関数を使用することです:'some string' + COALESCE(NULL, '') .. .



    1. T-SQLで日付から30日を引く方法

    2. 異なるデータベースからのテーブルの結合

    3. mysql:テーブルをループし、テーブルの追加インデックスを変更します

    4. PostgreSQL:タイムスタンプフィールドに「いいね」が付いたデータを選択します