Я реализовал механизм с помощью 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).
«call' SET QUOTED_IDENTIFIER ON »каждый раз, прежде чем мой proc будет выполнен из кода приложения». - это не ** то, что вы хотите. Вы правильно определили, что вам нужно изменить хранимые процедуры: «Когда создана хранимая процедура, [' SET QUOTED_IDENTIFIER'] (http://msdn.microsoft.com/en-us/library/ms174393.aspx) и настройки «SET ANSI_NULLS» фиксируются и используются для последующих вызовов этой хранимой процедуры. –
Вот [аналогичный вопрос] (http://stackoverflow.com/questions/2147489/change-the-ansi-nulls-setting-for-all -stored-procedure-in-the-database) от кого-то, кто хотел изменить ANSI_NULLS на всех своих процедурах (найденный путем поиска «изменить хранимую процедуру quoted_identifier setting») –
Спасибо Damien. Я создал SQL-скрипт для сделайте то же самое сейчас. Опубликуйте свой комментарий в ответ, я отметю его и закрою этот вопрос. – Adi