SET ANSI_WARNINGS (Transact-SQL)SET ANSI_WARNINGS (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

複数のエラー条件に対して ISO 標準の動作をすることを指定します。Specifies ISO standard behavior for several error conditions.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

-- Syntax for SQL Server and Azure SQL Database
  
SET ANSI_WARNINGS { ON | OFF }
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse

SET ANSI_WARNINGS ON

RemarksRemarks

SET ANSI_WARNINGS は、次の条件に影響します。SET ANSI_WARNINGS affects the following conditions:

  • ON に設定した場合、SUM、AVG、MAX、MIN、STDEV、STDEVP、VAR、VARP、COUNT などの集計関数に NULL 値が含まれていると、警告メッセージが生成されます。When set to ON, if null values appear in aggregate functions, such as SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP, or COUNT, a warning message is generated. OFF の場合、警告メッセージは生成されません。When set to OFF, no warning is issued.

  • ON に設定した場合、0 除算や演算オーバーフロー エラーが発生すると、ステートメントはロールバックされエラー メッセージが生成されます。When set to ON, the divide-by-zero and arithmetic overflow errors cause the statement to be rolled back and an error message is generated. OFF に設定した場合、0 除算や演算オーバーフロー エラーが発生すると、NULL 値が返されます。When set to OFF, the divide-by-zero and arithmetic overflow errors cause null values to be returned. INSERT または UPDATE が character、Unicode、binary 型の列に対して実行され、新しい値の長さが列の最大サイズを超過すると、0 除算や演算オーバーフロー エラーが原因となって NULL 値が返されます。The behavior in which a divide-by-zero or arithmetic overflow error causes null values to be returned occurs if an INSERT or UPDATE is tried on a character, Unicode, or binary column in which the length of a new value exceeds the maximum size of the column. SET ANSI_WARNINGS が ON の場合、INSERT または UPDATE は ISO 標準の指定に従って取り消されます。If SET ANSI_WARNINGS is ON, the INSERT or UPDATE is canceled as specified by the ISO standard. 文字型の列の末尾の空白文字とバイナリ列の末尾の NULL 値は無視されます。Trailing blanks are ignored for character columns and trailing nulls are ignored for binary columns. OFF の場合、データは列のサイズに切り捨てられ、ステートメントは成功します。When OFF, data is truncated to the size of the column and the statement succeeds.

注意

binary データと varbinary データの型変換で切り捨てが発生した場合は、SET オプションの設定に関係なく、警告やエラーは発生しません。When truncation occurs in any conversion to or from binary or varbinary data, no warning or error is issued, regardless of SET options.

注意

ストアド プロシージャでパラメーターを引き渡す場合や、バッチ ステートメントで変数を宣言または設定する場合、またはユーザー定義関数においては、ANSI_WARNINGS は無視されます。ANSI_WARNINGS is not honored when passing parameters in a stored procedure, user-defined function, or when declaring and setting variables in a batch statement. たとえば、変数を char(3) と定義し、これに 4 文字以上の値を設定すると、データが定義されたサイズに合わせて切り捨てられてから、INSERT または UPDATE ステートメントが成功します。For example, if a variable is defined as char(3), and then set to a value larger than three characters, the data is truncated to the defined size and the INSERT or UPDATE statement succeeds.

sp_configure の user options オプションを使用すると、ANSI_WARNINGS の既定の設定をサーバーに対するすべての接続に適用できます。You can use the user options option of sp_configure to set the default setting for ANSI_WARNINGS for all connections to the server. 詳細については、「 sp_configure (Transact-SQL)」を参照してください。For more information, see sp_configure (Transact-SQL).

計算列やインデックス付きビューのインデックスを作成または操作するときには、ANSI_WARNINGS を ON に設定する必要があります。ANSI_WARNINGS must be ON when you are creating or manipulating indexes on computed columns or indexed views. SET ANSI_WARNINGS が OFF の場合、計算列にインデックスが設定されているテーブルやインデックス付きビューに対して CREATE、UPDATE、INSERT、または DELETE ステートメントを実行すると失敗します。If SET ANSI_WARNINGS is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail. インデックス付きビューおよび計算列上のインデックスに必要な SET オプション設定の詳細については、「SET ステートメント (Transact-SQL)」の「SET ステートメントの使用に関する留意事項」を参照してください。For more information about required SET option settings with indexed views and indexes on computed columns, see "Considerations When You Use the SET Statements" in SET Statements (Transact-SQL).

SQL ServerSQL Server には、ANSI_WARNINGS データベース オプションが用意されています。includes the ANSI_WARNINGS database option. これは、SET ANSI_WARNINGS と同じです。This is equivalent to SET ANSI_WARNINGS. SET ANSI_WARNINGS が ON の場合、0 除算やデータベースの列のサイズを超える文字列、または同様のエラーが発生すると、エラーまたは警告が発生します。When SET ANSI_WARNINGS is ON, errors or warnings are raised in divide-by-zero, string too large for database column, and other similar errors. SET ANSI_WARNINGS が OFF の場合、これらのエラーや警告は発生しません。When SET ANSI_WARNINGS is OFF, these errors and warnings are not raised. model データベースでは、SET ANSI_WARNINGS の既定の設定は OFF です。The default value in the model database for SET ANSI_WARNINGS is OFF. 指定しない場合は、ANSI_WARNINGS の設定が適用されます。If not specified, the setting of ANSI_WARNINGS applies. SET ANSI_WARNINGS を OFF に設定した場合、SQL ServerSQL Server では sys.databases カタログ ビューの is_ansi_warnings_on 列の値が使用されます。If SET ANSI_WARNINGS is OFF, SQL ServerSQL Server uses the value of the is_ansi_warnings_on column in the sys.databases catalog view.

重要

分散クエリを実行する場合は、ANSI_WARNINGS を ON に設定してください。ANSI_WARNINGS should be set to ON for executing distributed queries.

SQL ServerSQL Server Native Client ODBC ドライバーおよび SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server では、接続時に自動的に ANSI_WARNINGS が ON に設定されます。The SQL ServerSQL Server Native Client ODBC driver and SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server automatically set ANSI_WARNINGS to ON when connecting. この構成は、ODBC データ ソースまたは ODBC 接続属性で定義され、接続前にアプリケーションで設定できます。This can be configured in ODBC data sources, in ODBC connection attributes, set in the application before connecting. DB-Library アプリケーションからの接続に対しては、既定では SET ANSI_WARNINGS は OFF に設定されています。The default for SET ANSI_WARNINGS is OFF for connections from DB-Library applications.

ANSI_DEFAULTS が ON の場合は、ANSI_WARNINGS は有効になります。When ANSI_DEFAULTS is ON, ANSI_WARNINGS is enabled.

ANSI_WARNINGS の設定は、解析時ではなく実行時に定義されます。The setting of ANSI_WARNINGS is defined at execute or run time and not at parse time.

SET ARITHABORT と SET ARITHIGNORE のいずれかが OFF でも、SET ANSI_WARNINGS が ON の場合は、SQL ServerSQL Server で 0 除算やオーバーフロー エラーが検出されるとエラー メッセージが返されます。If either SET ARITHABORT or SET ARITHIGNORE is OFF and SET ANSI_WARNINGS is ON, SQL ServerSQL Server still returns an error message when encountering divide-by-zero or overflow errors.

この設定の現在の設定を表示するには、次のクエリを実行します。To view the current setting for this setting, run the following query.

DECLARE @ANSI_WARN VARCHAR(3) = 'OFF';  
IF ( (8 & @@OPTIONS) = 8 ) SET @ANSI_WARN = 'ON';  
SELECT @ANSI_WARN AS ANSI_WARNINGS;  

アクセス許可Permissions

ロール public のメンバーシップが必要です。Requires membership in the public role.

使用例Examples

次の例では、SET ANSI_WARNINGS が ON の場合と OFF の場合に分けて、上の 3 つの状況を示しています。The following example demonstrates the three situations that are previously mentioned, with the SET ANSI_WARNINGS to ON and OFF.

CREATE TABLE T1   
(  
   a int,   
   b int NULL,   
   c varchar(20)  
);  
GO  
  
SET NOCOUNT ON;  
  
INSERT INTO T1   
VALUES (1, NULL, '')   
      ,(1, 0, '')  
      ,(2, 1, '')  
      ,(2, 2, '');  
  
SET NOCOUNT OFF;  
GO  

次に ANSI_WARNINGS を ON に設定し、テストします。Now set ANSI_WARNINGS to ON and test.

PRINT '**** Setting ANSI_WARNINGS ON';  
GO  
  
SET ANSI_WARNINGS ON;  
GO  
  
PRINT 'Testing NULL in aggregate';  
GO  
SELECT a, SUM(b)   
FROM T1   
GROUP BY a;  
GO  
  
PRINT 'Testing String Overflow in INSERT';  
GO  
INSERT INTO T1   
VALUES (3, 3, 'Text string longer than 20 characters');  
GO  
  
PRINT 'Testing Divide by zero';  
GO  
SELECT a / b AS ab   
FROM T1;  
GO  

次に ANSI_WARNINGS を OFF に設定し、テストします。Now set ANSI_WARNINGS to OFF and test.

PRINT '**** Setting ANSI_WARNINGS OFF';  
GO  
SET ANSI_WARNINGS OFF;  
GO  
  
PRINT 'Testing NULL in aggregate';  
GO  
SELECT a, SUM(b)   
FROM T1   
GROUP BY a;  
GO  
  
PRINT 'Testing String Overflow in INSERT';  
GO  
INSERT INTO T1   
VALUES (4, 4, 'Text string longer than 20 characters');  
GO  
SELECT a, b, c   
FROM T1  
WHERE a = 4;  
GO  
  
PRINT 'Testing Divide by zero';  
GO  
SELECT a / b AS ab   
FROM T1;  
GO  
  
DROP TABLE T1;  

参照See Also

INSERT (Transact-SQL) INSERT (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
SET ステートメント (Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL) SET ANSI_DEFAULTS (Transact-SQL)
SESSIONPROPERTY (Transact-SQL)SESSIONPROPERTY (Transact-SQL)