默认情况下,OLEDB连接的SQL连接选项ARITHABORT为OFF,我认为Linq To SQL正在使用它。然而,我需要将其设置为ON。原因是我的数据库包含一些索引视图,如果连接没有ARITHABORT ON,则针对索引视图中的表的任何插入/更新/删除操作都会失败。即使使用WITH(NOEXPAND)提示(在SQL标准版中必须使用以获得索引视图的性能优势)对索引视图本身进行选择也会失败。
在数据上下文中是否有地方可以指定我想要此选项为ON?或者在代码中的某个地方可以这样做吗?
我已经实现了一个笨拙的解决方法,但我不喜欢它...我必须为每个select/insert/update/delete操作创建一个存储过程,并在此过程中首先运行SET ARITHABORT ON,然后执行另一个包含实际select/insert/update/delete的过程。换句话说,第一个过程只是第二个过程的包装器。将SET ARITHABORT ON放在select/insert/update/delete代码上面是不起作用的。
在数据上下文中是否有地方可以指定我想要此选项为ON?或者在代码中的某个地方可以这样做吗?
我已经实现了一个笨拙的解决方法,但我不喜欢它...我必须为每个select/insert/update/delete操作创建一个存储过程,并在此过程中首先运行SET ARITHABORT ON,然后执行另一个包含实际select/insert/update/delete的过程。换句话说,第一个过程只是第二个过程的包装器。将SET ARITHABORT ON放在select/insert/update/delete代码上面是不起作用的。
ANSI_WARNINGS
也关闭(除非你的数据库处于SQL 2000兼容级别),否则它不应该关心这个。http://sqlblog.com/blogs/kalen_delaney/archive/2008/06/19/things-keep-changing.aspx - Martin SmithNUMERIC_ROUNDABORT
也是如此),但确实指出其他选项是针对ODBC和OLE DB客户端明确说明的。我通过.NET(OLE DB)和SQLCMD.EXE(ODBC)进行了测试,它们都不需要设置ARITHABORT
就可以选择和更新索引视图。在执行你回答中提到的帮助程序类之前,你是否遇到过错误? - Solomon Rutzky