昨天一直纠结于执行存储过程异常的问题,后来单独写了个demo测试了一下,又到网上找了找资料,最终解决了这个问题。

当你在SQL Server上试图更新一个索引视图引用的表时,你可能回收到如下有错误

INSERT 失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'

在计算列或索引视图上创建或操作索引时,SET ANSI_NULLS 也必须为 ON。如果 SET ANSI_NULLS 为 OFF,计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。SQL Server 将返回一个错误,列出所有违反所需值的 SET 选项。另外,在执行 SELECT 语句时,如果 SET ANSI_NULLS 为 OFF,则 SQL Server 将忽略计算列或视图上的索引值并解析选择,就好象表或视图上没有这样的索引一样.

 

解决方案:

1.你必须在TSQL前Set ARITHABORT ON,代码如下

Set ARITHABORT ON
GO
INSERT INTO ta ..

2.在ADO中,你可以这样来写(C#代码)

MyConnection.Execute("SET ARITHABORT ON");

如果以上你都觉得很麻烦或由于一些原因没法更改,你可以尝试修改SQL Server服务器选项

3.exec sp_dboption 'yourdb','ARITHABORT','true'

还可以

4.ALTER DATABASE yourdb
SET ARITHABORT ON