NHibernate と SQL Server 2005 を使用しており、テーブルの 1 つで計算列にインデックスを作成しています。
私の問題は、そのテーブルにレコードを挿入すると、次のエラーが発生することです。
次の SET オプションの設定が正しくないため、INSERT が失敗しました: 'ARITHABORT'
挿入の前に使用SET ARITHABORT ON;
していますが、まだこのエラーがあります。
NHibernate と SQL Server 2005 を使用しており、テーブルの 1 つで計算列にインデックスを作成しています。
私の問題は、そのテーブルにレコードを挿入すると、次のエラーが発生することです。
次の SET オプションの設定が正しくないため、INSERT が失敗しました: 'ARITHABORT'
挿入の前に使用SET ARITHABORT ON;
していますが、まだこのエラーがあります。
計算列を含むテーブルへの挿入には、次の設定オプションが必要です。
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 ...
また、アプリケーションからストアド プロシージャ (レコードを更新する) を実行しているときにこのエラーが発生し、これで問題が解決しました: 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
これが誰かに役立つことを願っています。
SQL Server Mgt Studio を開き、サーバー名を右クリックして [プロパティ] を選択し、[接続] タブを開き、算術中止オプションを確認します。
データベース オプションを変更できるため、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;