5

私はNHibernateとSQL Server 2005を使用していますが、私のテーブルの計算カラムにインデックスがあります。SQL Server - INSERTが 'ARITHABORT'のために失敗しました

INSERT failed because the following SET options have incorrect settings: 'ARITHABORT'

私は挿入する前SET ARITHABORT ON;を使用するが、それでもこのエラーを持っている:

私の問題は、私はそのテーブルにレコードを挿入するとき、私は次のエラーを取得するということです。計算列を持つテーブルに挿入するために

答えて

5

、あなたはこれらの設定オプションが必要:

NUMERIC_ROUNDABORTオプションはOFFに設定する必要があり、かつ、以下のオプションがONに設定する必要があります。

ANSI_NULLS 
ANSI_PADDING 
ANSI_WARNINGS 
ARITHABORT 
CONCAT_NULL_YIELDS_NULL 
QUOTED_IDENTIFIER 

トライを追加これはあなたの挿入の前に:

set NUMERIC_ROUNDABORT off 
set ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER on 

insert ... 
+0

'あなたの接続でどういう意味ですか? ' NHibernateのセッション作成時にこれらを設定する必要がありますか?私は挿入、更新、削除時に 'ARITHABORT'を' ON'に設定します。 –

+0

これはセッションレベルのオプションなので、接続で一度だけ実行する必要がありますが、問題を引き起こすことなく複数回設定できます。更新された回答を参照 – muhmud

+0

私はFluent NHibernateを使用しています。設定方法を教えてください。 –

5

私は今日この問題に遭遇し、それを解決しました。私はSQL Server 2008 r2の列にフィルターされたインデックスを作成しましたが、挿入するときにこのエラーが発生します。この質問は完全に答えられていませんでした。なぜなら、いつも各インサートで大蛇をオンにするのは面倒かもしれないからです。私はそれが問題だったデータベースの互換性レベルであることを示したブログを見つけました。互換性レベルを80(2000)から100(2008)に変更し、問題を解決しました。互換性レベルを90に変更するとこれを解決するかどうかはわかりませんが、試してみる価値があります。

ここで変更するSQL Serverの互換性レベルとコマンド。この変更は、テストで行ったことhttp://msdn.microsoft.com/en-us/library/bb510680.aspx

別の回避策がブログでトリガーを追加することであり、私が話していたが、これは動作しないか、互換性モードを変更できない場合は、ここでhttp://chrismay.org/2013/05/23/interesting-problem-with-sql-server-arithabort-filtered-indexes-calculated-columns-and-compatibility-mode-of-80/

注意本番環境でこのような変更を加える前に、すべてのアプリケーションをテストする必要があります。これを変更する前に、DBAに確認してください。

+0

あなたの常駐DBAが* compatibilitylevel *の変更を承認して誠にありがとうございます。この変更を軽く行うことはできません。また、すべてのアプリケーションを広範にテストすることなく、データベースを使用することもできます。 –

+1

私はDBAであり、毎週バックアップからスクリプトを作成して、バックアップが良好であることを確認するスクリプトを作成しました:-)それが本番環境で変更される前に、より多くのテストを行う必要があります。 – bpfrenchak

+0

良いそれはあなたの答えに加えられるべきです。 –

0

アボートデータベース・オプションを変更することができますので、SETオプションが右算術をチェックして[プロパティ、オープン接続]タブを選択し、サーバー名をクリックすると、

ALTER DATABASE [$(DatabaseName)] 
     SET ANSI_NULLS OFF, 
      ANSI_PADDING OFF, 
      ANSI_WARNINGS OFF, 
      ARITHABORT OFF, 
      CONCAT_NULL_YIELDS_NULL OFF, 
      NUMERIC_ROUNDABORT OFF, 
      QUOTED_IDENTIFIER OFF 
     WITH ROLLBACK IMMEDIATE; 
0

オープンSQL ServerのMGTメーカーグローバルに利用されていますオプション

1

は、アプリケーションからのストアドプロシージャ(つまり、更新レコード)を実行しながら、私もこのエラーが発生し、これが私の問題を解決:https://support.microsoft.com/en-us/kb/305333

だから、基本的に、私はコードのこのセットを追加しましたストアドプロシージャを実行する前に

sqlConn = New SqlConnection(connectionString) 
If sqlConn.State = ConnectionState.Closed Then sqlConn.Open() 

sqlCmd = New SqlCommand() 
With sqlCmd 
    .Connection = sqlConn 
    .CommandType = CommandType.text 
    .CommandText = "SET ARITHABORT ON" 
    .ExecuteNonQuery() 

    .CommandType = CommandType.StoredProcedure 
    .CommandText = "MY PROCEDURE" 
    .ExecuteNonQuery() 
End With 

これは誰かに役立つことを望みます。

関連する問題