適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
Microsoft Fabric の SQL データベース
Transact-SQL プログラミング言語は、特定の情報の現在のセッション処理を変更するいくつかの SET 文を提供します。 SET文は以下の表に示されたカテゴリーにまとめられています。
SET文でローカル変数を設定する方法については、SET @local_variable (Transact-SQL)を参照してください。
SET文を使う際の考慮事項
すべての SET 文は実行時または実行時に実行されますが、以下の文は解析時に実行されます。
- SET FIPS_FLAGGER
- SET OFFSETS
- SET PARSEONLY
- および SET QUOTED_IDENTIFIER
SET文がストアドプロシージャやトリガーで実行された場合、ストアドプロシージャやトリガーが制御を返した後、SETオプションの値は復元されます。 また、動的SQL文字列に SET 文を指定し、 sp_executesql またはEXECUTEで実行すると、動的SQLのバッチからコントロールが戻った後、 SET オプションの値は復元されます。
ストアドプロシージャは、SETSET ANSI_NULLSとSETSET QUOTED_IDENTIFIERを除き、実行時に指定されたSET設定で実行されます。 SET SET ANSI_NULLSまたはSETSET QUOTED_IDENTIFIERを指定するストアドプロシージャは、ストアドプロシージャ作成時に指定された設定を使用します。 ストアドプロシージャ内で使用した場合、 SET 設定は無視されます。
sp_configure の user options 設定を使用すると、サーバー単位で設定が行えます。この設定は複数のデータベースに対して有効です。 この設定は明示的な SET 文のように動作しますが、ログイン時に発生します。
ALTER DATABASEを使って設定したデータベース設定はデータベースレベルでのみ有効であり、明示的に設定された場合にのみ有効となります。 データベース設定は、sp_configure を使用して設定したインスタンス オプションの設定をオーバーライドします。
SET文がONとOFFを使う場合、複数のSETオプションでどちらかを指定することができます。
注意
これは統計に関連する SET オプションには当てはまりません。
例えば、
SET QUOTED_IDENTIFIER, ANSI_NULLS ONは QUOTED_IDENTIFIER と ANSI_NULLS の両方をONに設定します。SET 文の設定は、 ALTER DATABASEを使って設定された同一のデータベースオプション設定を上書きします。 例えば、 SET ANSI_NULLS 文で指定された値はANSI_NULLsのデータベース設定を上書きします。 さらに、前回 sp_configure user options 設定を使用したときに有効になった値や、すべての ODBC および OLE/DB 接続に適用される値を使用してデータベースに接続すると、自動的に ON になる接続設定がいくつかあります。
ALTER、CREATE、 DROP DATABASE の文は SETSET LOCK_TIMEOUT 設定を尊重しません。
グローバルまたはショートカット SET 文が複数の設定を設定する場合、ショートカット SET 文を発行すると、ショートカット SET 文が影響するすべてのオプションの設定がリセットされます。 ショートカットSET文に影響を受けるSETオプションがショートカットSET文が発行された後に設定された場合、個々のSET文が同様のショートカット設定を上書きします。 ショートカット SET 文の例としては SETSET ANSI_DEFAULTSがあります。
バッチを使用する場合、データベースのコンテキストは、USE ステートメントを使って確立したバッチによって決まります。 ストアド プロシージャの外部で実行される、バッチ内の計画外クエリとその他すべてのステートメントは、USE ステートメントによって確立されるデータベースと接続のオプション設定を継承します。
複数のアクティブ結果セット(MARS)リクエストは、最新のセッション SET オプション設定を含むグローバル状態を共有します。 各リクエストが実行されると、 SET オプションを変更することができます。 この変更は対象となる要求のコンテキストだけに適用され、同時実行される他の MARS 要求には影響しませんが、 しかし、リクエスト実行が完了すると、新しい SET オプションはグローバルセッション状態にコピーされます。 この変更後に同じセッションで実行される新しいリクエストは、これらの新しい SET オプション設定を使用します。
バッチまたは他のストアド プロシージャからストアド プロシージャが実行された場合、そのストアド プロシージャが格納されているデータベースに設定されているオプション値で実行されます。 たとえば、ストアド プロシージャ db1.dbo.sp1 でストアド プロシージャ db2.dbo.sp2 を呼び出す場合、ストアド プロシージャ sp1 はデータベース db1 の現在の互換性レベル設定で実行され、ストアド プロシージャ sp2 はデータベース db2 の現在の互換性レベル設定で実行されます。
Transact-SQL ステートメントが複数のデータベースにあるオブジェクトに関係するとき、現在のデータベース コンテキストと現在の接続コンテキストがそのステートメントに適用されます。 ここで、Transact-SQL ステートメントがバッチ内にある場合、現在の接続コンテキストは USE ステートメントで定義したデータベースになります。Transact-SQL ステートメントがストアド プロシージャ内にある場合、接続コンテキストはそのストアド プロシージャが格納されているデータベースになります。
計算されたカラムやインデックスビューでインデックスを作成・操作する際は、これらの SET オプションをONに設定する必要があります: ARITHABORT、 CONCAT_NULL_YIELDS_NULL、 QUOTED_IDENTIFIER、 ANSI_NULLS、 ANSI_PADDING、 ANSI_WARNINGS。 オプション NUMERIC_ROUNDABORT をOFFに設定してください。
これらのオプションのどれもを必要な値に設定しなければ、 INSERT、 UPDATE、 DELETE、DBCC CHECKDB、DBCC CHECKTABLEのアクションは、計算された列にインデックスを持つインデックス付きビューやテーブルに対して失敗します。 SQL Server ではエラーが発生し、正しく設定されなかったすべてのオプションが一覧表示されます。 また、SQL Server では、このようなテーブルやインデックス付きビューに対して SELECT ステートメントを実行すると、計算列またはビューにインデックスが存在しないものとして処理されます。
SET RESULT_SET_CACHINGがONの場合、現在のクライアントセッションの結果キャッシュ機能が有効になります。 Result_set_caching がデータベース レベルで OFF にされていた場合、これをセッションで ON にすることはできません。 SET RESULT_SET_CACHINGがオフの場合、現在のクライアントセッションでは結果セットキャッシュ機能が無効になります。 この設定を変更するには、public ロールのメンバーシップが必要です。 適用対象: Azure Synapse Analytics Gen2