3

Я реализовал механизм с помощью SqlDependency, который предупреждает меня о любых изменениях в конкретной таблице базы данных.Внедрение QUOTED_IDENTIFIER глобально

Но это нарушает мои существующие функции, когда я обновляю таблицу базы данных, на которой я реализовал SqlDependency.

Я получаю следующее сообщение об ошибке:

UPDATE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.

Это похоже на "sqldependency-causes-error-in-other-application".

Я выяснил, что proc, который выполняет обновление в таблице, был создан с QUOTED_IDENTIFIER установлен в положение OFF, и это является точной причиной проблемы.

Если я изменил процесс с помощью «SET QUOTED_IDENTIFIER ON« все работает отлично. Но это не выполнимое решение, так как мне придется искать все процессы и изменять их.

Что я хочу знать, существует общий способ вызова «SET QUOTED_IDENTIFIER ON» каждый раз, прежде чем мой proc будет выполнен из кода приложения.

Мое приложение представляет собой веб-приложение ASP.Net 4, и я использую Microsoft Enterprise Library 5.0 для выполнения операций с базой данных. В котором я использую следующий компонент: Microsoft.Practices.EnterpriseLibrary.Data.Database

Любые альтернативные решения SqlDependency также приветствуются.

[отредактировано] Также есть какой-либо прямой способ в SQL Server 2008, чтобы напрямую установить QUOTED_IDENTIFIER в true без изменения proc. Я думаю, это написать скрипт, который будет устанавливать QUOTED_IDENTIFIER для всех объектов, зависящих от этой таблицы (используя sp_depends).

+0

«call' SET QUOTED_IDENTIFIER ON »каждый раз, прежде чем мой proc будет выполнен из кода приложения». - это не ** то, что вы хотите. Вы правильно определили, что вам нужно изменить хранимые процедуры: «Когда создана хранимая процедура, [' SET QUOTED_IDENTIFIER'] (http://msdn.microsoft.com/en-us/library/ms174393.aspx) и настройки «SET ANSI_NULLS» фиксируются и используются для последующих вызовов этой хранимой процедуры. –

+0

Вот [аналогичный вопрос] (http://stackoverflow.com/questions/2147489/change-the-ansi-nulls-setting-for-all -stored-procedure-in-the-database) от кого-то, кто хотел изменить ANSI_NULLS на всех своих процедурах (найденный путем поиска «изменить хранимую процедуру quoted_identifier setting») –

+0

Спасибо Damien. Я создал SQL-скрипт для сделайте то же самое сейчас. Опубликуйте свой комментарий в ответ, я отметю его и закрою этот вопрос. – Adi

ответ

0

Существует еще один способ, если вы все еще ищете его, по общему признанию, это не самая самодокументируемая.

EXEC sys.sp_configure N'user options', N'256' 
GO 
RECONFIGURE WITH OVERRIDE 
GO 

Это то, что делает SSMS если вы щелкните правой кнопкой мыши на базе данных, перейдите к свойствам, соединения, а затем выберите идентификаторы в кавычках из списка. Он заставляет сервер sql устанавливать параметр с котировочным идентификатором как включен для всех входящих соединений.

Смежные вопросы