SET ステートメント (Transact-SQL)SET Statements (Transact-SQL)

適用対象: ○SQL Server (2008 以降) XAzure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Transact-SQLTransact-SQL プログラミング言語には、現在のセッションにおける特定の情報の処理方法を変更する SET ステートメントがいくつか用意されています。The Transact-SQLTransact-SQL programming language provides several SET statements that change the current session handling of specific information. これらの SET ステートメントは、次の表に示すカテゴリに分類されます。The SET statements are grouped into the categories shown in the following table.

SET ステートメントを使用したローカル変数の設定について詳しくは、「SET @local_variable (Transact-SQL)」をご覧ください。For information about setting local variables with the SET statement, see SET @local_variable (Transact-SQL).

カテゴリCategory ステートメントStatements
日付時刻ステートメントDate and time statements SET DATEFIRSTSET DATEFIRST

SET DATEFORMATSET DATEFORMAT
ロック ステートメントLocking statements SET DEADLOCK_PRIORITYSET DEADLOCK_PRIORITY

SET LOCK_TIMEOUTSET LOCK_TIMEOUT
その他のステートメントMiscellaneous statements SET CONCAT_NULL_YIELDS_NULLSET CONCAT_NULL_YIELDS_NULL

SET CURSOR_CLOSE_ON_COMMITSET CURSOR_CLOSE_ON_COMMIT

SET FIPS_FLAGGERSET FIPS_FLAGGER

SET IDENTITY_INSERTSET IDENTITY_INSERT

SET LANGUAGESET LANGUAGE

SET OFFSETSSET OFFSETS

SET QUOTED_IDENTIFIERSET QUOTED_IDENTIFIER
クエリ実行ステートメントQuery Execution Statements SET ARITHABORTSET ARITHABORT

SET ARITHIGNORESET ARITHIGNORE

SET FMTONLYSET FMTONLY

注: この機能はメンテナンス モードであり、Microsoft SQL Server の将来のバージョンで削除される可能性があります。This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。Avoid using this feature in new development work, and plan to modify applications that currently use this feature.Note: この機能はメンテナンス モードであり、Microsoft SQL Server の将来のバージョンで削除される可能性があります。This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

SET NOCOUNTSET NOCOUNT

SET NOEXECSET NOEXEC

SET NUMERIC_ROUNDABORTSET NUMERIC_ROUNDABORT

SET PARSEONLYSET PARSEONLY

SET QUERY_GOVERNOR_COST_LIMITSET QUERY_GOVERNOR_COST_LIMIT

SET ROWCOUNTSET ROWCOUNT

SET TEXTSIZESET TEXTSIZE
ISO 設定ステートメントISO Settings statements SET ANSI_DEFAULTSSET ANSI_DEFAULTS

SET ANSI_NULL_DFLT_OFFSET ANSI_NULL_DFLT_OFF

SET ANSI_NULL_DFLT_ONSET ANSI_NULL_DFLT_ON

SET ANSI_NULLSSET ANSI_NULLS

SET ANSI_PADDINGSET ANSI_PADDING

SET ANSI_WARNINGSSET ANSI_WARNINGS
統計ステートメントStatistics statements SET FORCEPLANSET FORCEPLAN

SET SHOWPLAN_ALLSET SHOWPLAN_ALL

SET SHOWPLAN_TEXTSET SHOWPLAN_TEXT

SET SHOWPLAN_XMLSET SHOWPLAN_XML

SET STATISTICS IOSET STATISTICS IO

SET STATISTICS XMLSET STATISTICS XML

SET STATISTICS PROFILESET STATISTICS PROFILE

SET STATISTICS TIMESET STATISTICS TIME
トランザクション ステートメントTransactions statements [SET IMPLICIT_TRANSACTIONS]SET IMPLICIT_TRANSACTIONS

SET REMOTE_PROC_TRANSACTIONSSET REMOTE_PROC_TRANSACTIONS

SET TRANSACTION ISOLATION LEVELSET TRANSACTION ISOLATION LEVEL

SET XACT_ABORTSET XACT_ABORT

SET ステートメントの使用に関する注意点Considerations When You Use the SET Statements

  • すべての SET ステートメントは実行時に実行されますが、次のステートメントは解析時に実行されます。All SET statements run at execute or run time, except these statements, which run at parse time:

    • SET FIPS_FLAGGERSET FIPS_FLAGGER
    • SET OFFSETSSET OFFSETS
    • [SET PARSEONLY]SET PARSEONLY
    • SET QUOTED_IDENTIFIERand SET QUOTED_IDENTIFIER
  • SET ステートメントをストアド プロシージャまたはトリガー内で実行した場合、SET オプションの値は、ストアド プロシージャやトリガーから制御が返された後、元に戻されます。If a SET statement runs in a stored procedure or trigger, the value of the SET option gets restored after the stored procedure or trigger returns control. また、動的 SQL 文字列内で SET ステートメントを指定し、これを sp_executesql または EXECUTE で実行した場合、SET オプションの値は、動的 SQL 文字列で指定したバッチから制御が返された後、元に戻されます。Also, if you specify a SET statement in a dynamic SQL string that runs by using either sp_executesql or EXECUTE, the value of the SET option gets restored after control returns from the batch that you specified in the dynamic SQL string.

  • ストアド プロシージャでは、SET ANSI_NULLS と SET QUOTED_IDENTIFIERS を除き、実行時に指定した SET 設定が使用されます。Stored procedures execute with the SET settings specified at execute time except for SET ANSI_NULLS and SET QUOTED_IDENTIFIER. SET ANSI_NULLS または SET QUOTED_IDENTIFIER を指定するストアド プロシージャの場合は、ストアド プロシージャの作成時に指定した設定が使用されます。Stored procedures specifying SET ANSI_NULLS or SET QUOTED_IDENTIFIER use the setting specified at stored procedure creation time. ストアド プロシージャの内部で使用する場合、SET 設定は無視されます。If used inside a stored procedure, any SET setting is ignored.

  • sp_configureuser options 設定を使用すると、サーバー単位で設定が行えます。この設定は複数のデータベースに対して有効です。The user options setting of sp_configure allows for server-wide settings and works across multiple databases. この設定は明示的な SET ステートメントと同じように動作しますが、ログイン時に使用される点が異なります。This setting also behaves like an explicit SET statement, except that it occurs at login time.

  • ALTER DATABASE を使用して設定したデータベース設定は、データベース レベルで有効です。これは明示的に設定された場合のみ有効になります。Database settings set by using ALTER DATABASE are valid only at the database level and take effect only if explicitly set. データベース設定は、sp_configure を使用して設定したインスタンス オプションの設定をオーバーライドします。Database settings override instance option settings that are set by using sp_configure.

  • SET ステートメントで ON と OFF が使用される場合、複数の SET オプションに対していずれかを指定できます。If a SET statement uses ON and OFF, you can specify either one for multiple SET options.

    注意

    これは、統計情報に関連する SET オプションでは適用されません。This doesn't apply to the statistics related SET options.

    たとえば SET QUOTED_IDENTIFIER, ANSI_NULLS ON を使用すると、QUOTED_IDENTIFIER と ANSI_NULLS の両方を ON に設定できます。For example, SET QUOTED_IDENTIFIER, ANSI_NULLS ON sets both QUOTED_IDENTIFIER and ANSI_NULLS to ON.

  • SET ステートメントの設定は、ALTER DATABASE を使用して設定した同一のデータベース オプションの設定をオーバーライドします。SET statement settings override identical database option settings that are set by using ALTER DATABASE. たとえば、SET ANSI_NULLS ステートメントで指定した値は、ANSI_NULLS のデータベース設定よりも優先されます。For example, the value specified in a SET ANSI_NULLS statement will override the database setting for ANSI_NULLs. さらに、前回 sp_configure user options 設定を使用したときに有効になった値や、すべての ODBC および OLE/DB 接続に適用される値を使用してデータベースに接続すると、自動的に ON になる接続設定がいくつかあります。Additionally, some connection settings get automatically set ON when a user connects to a database based on the values that go into effect by the previous use of the sp_configure user options setting, or the values that apply to all ODBC and OLE/DB connections.

  • ALTER、CREATE、DROP DATABASE ステートメントでは、SET LOCK_TIMEOUT の設定は無視されます。ALTER, CREATE and DROP DATABASE statements don't honor the SET LOCK_TIMEOUT setting.

  • グローバルまたはショートカット SET ステートメントでいくつかの設定を行っている場合、ショートカット SET ステートメントを実行すると、そのショートカット SET ステートメントの影響を受けるすべてのオプションに関する既存の設定がリセットされます。When a global or shortcut SET statement sets several settings, issuing the shortcut SET statement resets the previous settings for all those options that the shortcut SET statement affects. ショートカット SET ステートメントを実行した後、ショートカット SET ステートメントの影響を受ける SET オプションを設定した場合は、個別の SET ステートメントの値の方が、同等のショートカットの設定よりも優先されます。If a SET option that gets affected by a shortcut SET statement gets set after the shortcut SET statement gets issued, the individual SET statement overrides the comparable shortcut settings. ショートカット SET ステートメントには SET ANSI_DEFAULTS などがあります。An example of a shortcut SET statement would be SET ANSI_DEFAULTS.

  • バッチを使用する場合、データベースのコンテキストは、USE ステートメントを使って確立したバッチによって決まります。When batches are used, the database context is determined by the batch that is established by using the USE statement. ストアド プロシージャの外部で実行される、バッチ内の計画外クエリとその他すべてのステートメントは、USE ステートメントによって確立されるデータベースと接続のオプション設定を継承します。Unplanned queries and all other statements that run outside the stored procedure and that are in batches inherit the option settings of the database and connection established by the USE statement.

  • 複数のアクティブな結果セット (MARS) 要求では、グローバル状態が共有されます。この状態には、最新のセッションでの SET オプション設定が含まれます。Multiple Active Result Set (MARS) requests share a global state that contains the most recent session SET option settings. 各要求を実行するとき、SET オプションを変更できます。When each request executes, it can modify the SET options. この変更は対象となる要求のコンテキストだけに適用され、同時実行される他の MARS 要求には影響しませんが、The changes are specific to the request context in which they're set, and don't affect other concurrent MARS requests. 要求の実行が完了した後に、新しい SET オプションがグローバル セッション状態にコピーされます。However, after the request execution is completed, the new SET options are copied to the global session state. この変更後、同じセッションで実行される新しい要求では、これらの新しい SET オプション設定が使用されます。New requests that execute under the same session after this change will use these new SET option settings.

  • バッチまたは他のストアド プロシージャからストアド プロシージャが実行された場合、そのストアド プロシージャが格納されているデータベースに設定されているオプション値で実行されます。When a stored procedure runs from a batch or from another stored procedure, it's run under the option values set up in the database that has the stored procedure. たとえば、ストアド プロシージャ db1.dbo.sp1 でストアド プロシージャ db2.dbo.sp2 を呼び出す場合、ストアド プロシージャ sp1 はデータベース db1 の現在の互換性レベル設定で実行され、ストアド プロシージャ sp2 はデータベース db2 の現在の互換性レベル設定で実行されます。For example, when stored procedure db1.dbo.sp1 calls stored procedure db2.dbo.sp2, stored procedure sp1 executes under the current compatibility level setting of database db1, and stored procedure sp2 executes under the current compatibility level setting of database db2.

  • Transact-SQLTransact-SQL ステートメントが複数のデータベースにあるオブジェクトに関係するとき、現在のデータベース コンテキストと現在の接続コンテキストがそのステートメントに適用されます。When a Transact-SQLTransact-SQL statement concerns objects that are in multiple databases, the current database context and the current connection context applies to that statement. ここで、Transact-SQLTransact-SQL ステートメントがバッチ内にある場合、現在の接続コンテキストは USE ステートメントで定義したデータベースになります。Transact-SQLTransact-SQL ステートメントがストアド プロシージャ内にある場合、接続コンテキストはそのストアド プロシージャが格納されているデータベースになります。In this case, if Transact-SQLTransact-SQL statement is in a batch, the current connection context is the database defined by the USE statement; if the Transact-SQLTransact-SQL statement is in a stored procedure, the connection context is the database that contains the stored procedure.

  • 計算列やインデックス付きビューを作成し、操作しているとき、次の SET オプションを ON に設定する必要があります。ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING、ANSI_WARNINGS。When you're creating and manipulating indexes on computed columns or indexed views, you must set these SET options to ON: ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER, ANSI_NULLS, ANSI_PADDING, and ANSI_WARNINGS. NUMERIC_ROUNDABORT オプションは OFF に設定します。Set the option NUMERIC_ROUNDABORT to OFF.

    これらのオプションのうち 1 つでも正しく設定しなかった場合は、インデックス付きビューに対して、または計算列にインデックスが含まれているテーブルに対して INSERT、UPDATE、DELETE、DBCC CHECKDB、DBCC CHECKTABLE を実行すると操作は失敗します。If you don't set any one of these options to the required values, INSERT, UPDATE, DELETE, DBCC CHECKDB, and DBCC CHECKTABLE actions on indexed views or tables with indexes on computed columns will fail. SQL ServerSQL Server ではエラーが発生し、正しく設定されなかったすべてのオプションが一覧表示されます。will raise an error listing all the options that are incorrectly set. また、SQL ServerSQL Server では、このようなテーブルやインデックス付きビューに対して SELECT ステートメントを実行すると、計算列またはビューにインデックスが存在しないものとして処理されます。Also, SQL ServerSQL Server will process SELECT statements on these tables or indexed views as if the indexes on computed columns or on the views don't exist.