По умолчанию опция подключения SQL ARITHABORT отключена для подключений OLEDB, которые, как я полагаю, использует Linq To SQL. Однако мне нужно, чтобы он был включен. Причина в том, что моя БД содержит некоторые индексированные представления, и любые операции вставки/обновления/удаления с таблицами, которые являются частью индексированного представления, не выполняются, если в соединении нет ARITHABORT ON. Даже выборки против самого индексированного представления выходят из строя, если используется подсказка WITH (NOEXPAND) (которую вы должны использовать в SQL Standard Edition, чтобы получить преимущества производительности индексированного представления).Как установить ARITHABORT ON для соединений в Linq To SQL
Есть ли где-то в контексте данных, которые я могу указать, я хочу, чтобы эта опция включена? Или где-то в коде я могу это сделать ??
У меня есть неудобное обходное решение, но мне оно не нравится .... Мне нужно создать хранимую процедуру для каждой операции select/insert/update/delete, и в этом proc сначала запустите SET ARITHABORT ON, затем выполните другой proc, который содержит фактический выбор/вставка/обновление/удаление. Другими словами, первый proc - это всего лишь оболочка для второго. Не стоит просто устанавливать SET ARITHABORT ON над кодом select/insert/update/delete.
Какую версию SQL Server вы используете? Если позднее SQL2000 это не должно заботиться об этом, если только ANSI_WARNINGS не выключен (если у вас нет базы данных на уровне совместимости SQL 2000) http://sqlblog.com/blogs/kalen_delaney/archive/2008/06/19/ things-keep-change.aspx –
Его SQL 2005. Да, он автоматически запускается вручную с помощью Management Studio, но OLEDB отключается (поэтому, если вы пишете приложение, параметр будет отключен для SQL-соединений приложения). – Laurence
Лоуренс, вы уверены, что соединения OLE DB явно отключили этот параметр? Документация для [ALTER DATABASE] (https://msdn.microsoft.com/en-us/library/bb522682.aspx) не говорит, что она делает (или для 'NUMERIC_ROUNDABORT'), но все же указывает, что другие параметры явно указано для клиентов ODBC и OLE DB. Я тестировал через .NET (OLE DB) и SQLCMD.EXE (ODBC), и ни один из них не требовал установки «ARITHABORT» для того, чтобы я мог SELECT и UPDATE индексированный вид. Получали ли вы ошибку до выполнения вспомогательного класса, как указано в вашем ответе? –