Transact-SQL プログラミング言語は、特定の情報を操作する現在のセッションを変更するためのいくつかの SET ステートメントを用意しています。
SET ステートメントは次のように分類されます。
| カテゴリ | 現在のセッションの設定を変更する対象 |
| 日付と時刻 | 日付と時刻の操作。 |
| ロック | Microsoft® SQL Server™ ロックの操作。 |
| その他 | SQL Server のその他の機能。 |
| クエリの実行 | クエリの実行と処理。 |
| SQL-92 設定 | SQL-92 既定の設定の使用。 |
| 統計 | 統計情報の表示。 |
| トランザクション | SQL Server トランザクションの操作。 |
日付時刻ステートメント
SET DATEFIRST
SET DATEFORMAT
ロック ステートメント
SET DEADLOCK_PRIORITY
SET LOCK_TIMEOUT
その他のステートメント
SET CONCAT_NULL_YIELDS_NULL
SET CURSOR_CLOSE_ON_COMMIT
SET DISABLE_DEF_CNST_CHK
SET FIPS_FLAGGER
SET IDENTITY_INSERT
SET LANGUAGE
SET OFFSETS
SET QUOTED_IDENTIFIER
クエリ実行ステートメント
SET ARITHABORT
SET ARITHIGNORE
SET FMTONLY
SET NOCOUNT
SET NOEXEC
SET NUMERIC_ROUNDABORT
SET PARSEONLY
SET QUERY_GOVERNOR_COST_LIMIT
SET ROWCOUNT
SET TEXTSIZE
SQL-92 設定ステートメント
SET ANSI_DEFAULTS
SET ANSI_NULL_DFLT_OFF
SET ANSI_NULL_DFLT_ON
SET ANSI_NULLS
SET ANSI_PADDING
SET ANSI_WARNINGS
統計ステートメント
SET FORCEPLAN
SET SHOWPLAN_ALL
SET SHOWPLAN_TEXT
SET STATISTICS IO
SET STATISTICS PROFILE
SET STATISTICS TIME
トランザクション ステートメント
SET IMPLICIT_TRANSACTIONS
SET REMOTE_PROC_TRANSACTIONS
SET TRANSACTION ISOLATION LEVEL
SET XACT_ABORT
SET ステートメントの使用に関する留意事項
- SET FIPS_FLAGGER、SET OFFSETS、SET PARSEONLY、および SET QUOTED_IDENTIFIER を除き、ほかのすべての SET ステートメントは実行時に設定されます。SET FIPS_FLAGGER、SET OFFSETS、SET PARSEONLY、および SET QUOTED_IDENTIFIER は解析時に設定されます。
- SET ステートメントがストアド プロシージャで設定された場合は、SET オプションの値は、制御がストアド プロシージャから返された後、元に戻されます。したがって、動的 SQL に指定されている SET ステートメントは、動的 SQL ステートメントの後にあるステートメントに影響しません。
- ストアド プロシージャは、SET ANSI_NULLS と SET QUOTED_IDENTIFIERS を除き、実行時に指定された SET 設定を使用して実行されます。SET ANSI_NULLS または SET QUOTED_IDENTIFIER が指定されたストアド プロシージャの場合は、ストアド プロシージャの作成時に指定された設定を使用します。ストアド プロシージャの内部で使用した場合、SET 設定は無視されます。
- sp_configure の user options 設定を使用すると、サーバー単位の設定が可能であり、この設定は複数のデータベースにわたって機能します。また、この設定は明示的な SET ステートメントと同じように動作しますが、ログイン時に発生する点が異なります。
- sp_dboption によるデータベース設定は、データベース レベルでのみ有効であり、明示的に設定されている場合にだけ有効になります。データベース設定は、sp_configure を使って設定したサーバーのオプション設定を上書きします。
- ON と OFF の設定ができる SET ステートメントの場合、複数の SET オプションに対して ON または OFF 設定を指定できます。次に例を示します。
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
この場合、QUOTED_IDENTIFIER と ANSI_NULLS が両方とも ON に設定されます。
- SET ステートメントによる設定は、sp_dboption を使用して設定されるデータベース オプションの設定より優先します。さらに、sp_configure user options 設定を前回使用したことで有効になった値、またはすべての ODBC および OLE/DB 接続に適用される値に基づき、ユーザーがデータベースに接続するときに、一部の接続設定は自動的に ON に設定されます。
- たとえば SET ANSI_DEFAULTS などのように、グローバルまたはショートカット SET ステートメントで多くの設定を行う場合、ショートカット SET ステートメントを実行すると、そのショートカット SET ステートメントの影響を受けるすべてのオプションの以前の設定はリセットされます。ショートカット SET ステートメントを実行した後、そのステートメントの影響を受けた SET オプションを個別に明示的に設定した場合、個別の SET ステートメントは対応するショートカット設定より優先します。
- バッチを使用する場合、データベース コンテキストは、USE ステートメントで設定されたバッチによって決まります。ストアド プロシージャの外部で実行され、バッチの内部にある追加クエリやほかのすべてのステートメントは、USE ステートメントで設定されるデータベースおよび接続のオプション設定を継承します。
- ストアド プロシージャがバッチまたはほかのストアド プロシージャから実行される場合は、そのストアド プロシージャが格納されているデータベースで現在設定されているオプション値を使用して実行されます。たとえば、ストアド プロシージャ db1.dbo.sp1 がストアド プロシージャ db2.dbo.sp2 を呼び出す場合、ストアド プロシージャ sp1 は、データベース db1 の現在の互換性レベル設定で実行され、ストアド プロシージャ sp2 は、データベース db2 の現在の互換性レベルで実行されます。
- Transact-SQL ステートメントが複数のデータベースに格納されているオブジェクトを参照する場合は、現在のデータベース コンテキストと現在の接続コンテキスト、つまり、バッチ内にある場合は USE ステートメントで定義されたデータベース、ストアド プロシージャ内にある場合はストアド プロシージャが格納されているデータベースがそのステートメントに適用されます。
- 計算列またはインデックス付きビューにおいてインデックスを作成および操作する場合、SET オプションの ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING、および ANSI_WARNINGS を ON に設定する必要があります。NUMERIC_ROUNDABORT オプションは OFF に設定する必要があります。
これらのオプションのいずれかが適切な値に設定されていない場合、インデックス付きビュー、または計算列にインデックスが設定されているテーブルにおいて実行される INSERT、UPDATE、および DELETE の処理は失敗します。SQL Server では、適切に設定されていないすべてのオプションを一覧したエラーを出力します。また、これらのテーブルまたはインデックス付きビューにおける SELECT ステートメントは、計算列またはビューにインデックスが存在しないものとして処理されます。