web-dev-qa-db-ja.com

ANSI_DEFAULTS設定のオンまたはオフを決定しますか?

サーバーでANSI_DEFAULTSが有効になっているかどうかを確認するにはどうすればよいですか。私のサーバーはIMPLICITトランザクションを使用しており、ANSI_DEFAULTSの設定に基づいて、トランザクションに影響を与えることができます。

ANSI_DEFAULTSの状態を確認するにはどうすればよいですか?

1
Ashish

ANSI_DEFAULTSは実際には明確なオプションではありませんが、他のいくつかのセッションベースのオプションの論理的なグループ化です。

  1. IMPLICIT_TRANSACTIONS
  2. CURSOR_CLOSE_ON_COMMIT
  3. ANSI_WARNINGS
  4. ANSI_PADDING
  5. ANSI_NULLS
  6. QUOTED_IDENTIFIER
  7. ANSI_NULL_DFLT_ON

@@ OPTIONS 構成関数を使用して、現在のセッション設定のビットマスク値を取得できます。その値は ユーザーオプションの構成サーバー構成オプション に記載されています。 = MSDNページ。

これらの要素をまとめると、オプションの「ansi_defaults」グループの現在のセッション設定を決定する次のクエリが得られます。

SELECT @@OPTIONS AS [user_options],
       CASE WHEN @@OPTIONS & 2 = 2 THEN 'ON' ELSE 'OFF' END AS [implicit_transactions],
       CASE WHEN @@OPTIONS & 4 = 4 THEN 'ON' ELSE 'OFF' END AS [cursor_close_on_commit],
       CASE WHEN @@OPTIONS & 8 = 8 THEN 'ON' ELSE 'OFF' END AS [ansi_warnings],
       CASE WHEN @@OPTIONS & 16 = 16 THEN 'ON' ELSE 'OFF' END AS [ansi_padding],
       CASE WHEN @@OPTIONS & 32 = 32 THEN 'ON' ELSE 'OFF' END AS [ansi_nulls],
       CASE WHEN @@OPTIONS & 256 = 256 THEN 'ON' ELSE 'OFF' END AS [quoted_identifier],
       CASE WHEN @@OPTIONS & 1024 = 1024 THEN 'ON' ELSE 'OFF' END AS [ansi_null_dflt_on],
       -- all above options combined
       CASE WHEN @@OPTIONS & 1342 = 1342 THEN 'ON' ELSE 'OFF' END AS [ansi_defaults]

allの基本オプションがONに設定されている場合、ANSI_DEFAULTSONとして表示されます。これらのオプションのanyOFFの場合、ANSI_DEFAULTSOFFになります。この動作は、次のテストで確認できます。

SET ANSI_DEFAULTS ON;

DBCC USEROPTIONS; -- ansi_defaults is SET

SET ANSI_NULLS OFF;

DBCC USEROPTIONS; -- ansi_nulls AND ansi_defaults are missing

SET ANSI_NULLS ON;

DBCC USEROPTIONS; -- ansi_nulls AND ansi_defaults are back

設定ANSI_DEFAULTS to ONは、これらのオプションのallONに設定します。同様に、ANSI_DEFAULTS to OFFは、これらのオプションのallOFFに設定します。

3
Solomon Rutzky

検索するには DBCC USER Options を使用する必要があります。DBCCuserOptionsは設定された値のみを表示します。ここで設定を見つけることができない場合、つまり設定されていません

SET ANSI_DEFAULTS ON;  
GO  
-- Display the current settings.  
DBCC USEROPTIONS;  
GO  
-- SET ANSI_DEFAULTS OFF.  
SET ANSI_DEFAULTS OFF;  
GO  

- -出力:

textsize    2147483647
language    us_english
dateformat  mdy
datefirst   7
lock_timeout    -1
quoted_identifier   SET
arithabort  SET
ansi_null_dflt_on   SET
ansi_defaults   SET
ansi_warnings   SET
ansi_padding    SET
ansi_nulls  SET
concat_null_yields_null SET
cursor_close_on_commit  SET
implicit_transactions   SET
isolation level read committed
0
TheGameiswar