ストレージ内SQLSERVERのオーバーシュートは、設定ANSI_NULLS ONにQUOTED_IDENTIFIER ONに説明を行って設定します

これらのステートメントは、SQL-92の規則を遵守し、MSSQL、SQL-92の設定です。
SET QUOTED_IDENTIFIERがオンになっている場合は
、識別子を二重引用符で区切られて、そしてテキストは、単一引用符で区切る必要があります。
SET QUOTED_IDENTIFIERがOFFの
識別子可能な引用符を。
SQL-92標準に等しい空の値を必要とする(=)、または等しくない(<)FALSEの値と比較した場合。
SETがONにANSI_NULLSすると
、SELECT文COLUMN_NAME = NULLはゼロ行が残って返すWHEREでもcolumn_nameが使用して、NULL値が含まれています。
でも、column_nameがcolumn_nameに<NULL SELECT文がゼロ行を返しますWHERE使用して、NULL以外の値が含まれています。
等しい(=)と(<)比較SQL-92規格に従わないと等しくありません。COLUMN_NAME SELECT文のCOLUMN_NAME = NULLの戻り列がnull値が含まれているWHERE使用してください。column_nameに<NULL SELECT文がnull以外の値を備えた行列を返すWHERE使用してください。また、使用COLUMN_NAME <XYZ_value SELECT文は、すべてのないNULL行XYZ_valueされていない戻りWHERE

 

sqlserver2005またはSQL2008データベースプロジェクトでは、ビューまたはストアドプロシージャを作成し、それは次の文の先頭に持っている傾向があります。

 

コードをコピー
ONのSET ANSI_NULLS
GO
ON SET QUOTED_IDENTIFIER
GO

..................

..................

GO

SETがOFF ANSI_NULLS
GO
SET QUOTED_IDENTIFIER OFF
GOを
コードをコピー

これらのステートメントは、SQL-92セット、2000/2005は、SQL-92の規則に準拠したSQL Serverのです。 
SET QUOTED_IDENTIFIERがONの場合、識別子は二重引用符で区切ることができ、テキストは単一引用符で区切る必要があります。SET QUOTED_IDENTIFIERがOFFの場合、識別子は引用符で囲むことができず、識別子のすべてのTransact-SQLの規則を遵守しなければなりません。 
SQL-92標準に等しい空の値を必要とする(=)、または等しくない(<>)FALSEの値と比較した場合。SET ANSI_NULLSがONの場合、SELECT文もCOLUMN_NAMEはCOLUMN_NAME = NULL戻り行が残るゼロWHERE使用して、ヌル値を含みます。でも、column_nameがWHERE column_nameに<> NULL SELECT文がゼロ行を返しますを使用して、非NULL値が含まれています。 
SET ANSI_NULLSがOFF、等しい(=)と等しくないことである場合(<>)の比較は、SQL-92規格に準拠していません。COLUMN_NAME SELECT文のCOLUMN_NAME = NULLの戻り列がnull値が含まれているWHERE使用してください。column_nameには、<> NULL SELECT文がnull以外の値を含む列の行を返すWHERE使用してください。また、WHERE COLUMN_NAME <> XYZ_value SELECT文を使用すると、すべてがNULLでない行をXYZ_valueれない戻ります。

 

約ANSI_NULLS SQL Server Books Onlineのは、このようなコード例を持って、それは次のように私は、出力のヒントを追加して、視覚的な効果が得られます。

コードをコピー
-テーブルt1と挿入値を作成します。
テーブルT1(INT NULL)を作成し
、T1値(NULL)。INSERT INTO
(0)T1値にINSERT
(1)T1値にINSERT
GO

-印刷メッセージとSELECT文を実行します。
PRINT 'テストのデフォルト設定'
@varnameはint型DECLARE
SELECT @varname = NULL
SELECT * 
T1から 
= @varname -结果为空
SELECT * 
T1から 
结果为空- <> @varname
SELECT *を 
T1から 
WHERE NULL IS -结果为NULLの
GO

- ONとテストへのSET ANSI_NULLS。
PRINT 'テストANSI_NULLS ON'
ONのSET ANSI_NULLS
GO
@varnameはint型DECLARE
SELECT @varname = NULL
SELECT *を 
T1から 
结果为空- = @varname
SELECT * 
T1から 
WHERE <> @varname -结果为空
SELECT * 
T1から 
为结果- WHERE ISのNULL NULL
GO

- OFFとテストにSET ANSI_NULLSを。
PRINTは、 'テストSET ANSI_NULLS OFF'
SET ANSI_NULLS OFFが
GO
@varnameはint型DECLARE
SELECT @varname = NULL  
SELECT *を 
T1から 
结果为NULL - = @varname
SELECT * 
T1から 
WHERE <> @varname -为0结果、 1
SELECT * 
T1から 
IS NULLのWHERE -结果为NULL
GOは

-テーブルt1をドロップします。
DROPテーブルT1

コードをコピー

上記のコードビューの作用効果の点から:
①SET ANSI_NULLS ON、または= NULL <>ヌルクエリ条件は、結果がnullの場合、IS NULL NULL行を表示する場合。
効果に関する結果のSET ANSI_NULLSの実装と一致する、設定されていないANSI_NULLS場合②、ここで、SQL-92の要件の1つは、「SQL-92標準は、(> <)(=)に等しいかまたは等しくないNULL値を必要とします値がFALSEの比較、既定値。「ああ、競合?
そして、どのようにこの問題を理解するには?
答えにおける文書の知識でANSI_NULLS SQL Serverオンラインブック:ODBCデータソース、ODBC接続でこの設定を接続する際にSQL Serverの「SQL ServerのODBCドライバーおよびMicrosoft OLE DBプロバイダが自動的にONにANSI_NULLSを設定します。構成の(SQL Serverに接続する前に、アプリケーションで提供される)OLE DB接続特性または特性。」

PS:実際には、プロセスの実際の使用は、我々はANSI_NULLSがONに設定またはFalseされて考えていない、null値の当社取り扱いがNULLであるか、NULLではありませんされています

おすすめ

転載: www.cnblogs.com/kelly1314/p/10972196.html