Подтвердить что ты не робот

Ошибка UPDATE, потому что следующие параметры SET имеют неправильные настройки: 'QUOTED_IDENTIFIER'

У меня проблема с обновленной хранимой процедурой. Ошибка:

ОБНОВЛЕНИЕ не удалось, потому что следующие параметры SET имеют неправильные настройки: "QUOTED_IDENTIFIER". Убедитесь, что параметры SET верны для использования с индексированными представлениями и/или индексами для вычисляемых столбцов и/или уведомлениями о запросах и/или методами типа данных xml.

SQL State: 42000
Native Error: 1934

К сожалению, для этой таблицы нет индексированных представлений, вычисляемых столбцов или уведомлений о запросах. Эта хранимая процедура работала в течение последних нескольких дней, и с сегодняшнего дня возвращает эту ошибку.

Есть ли какие-либо предложения, которые помогут определить проблему?

Примечание: Если я установлю quoted_identifier на ON и перезапущу CREATE PROCEDURE, проблема будет исправлена (пока). Но я хочу понять, что вызвало эту проблему в первую очередь.

4b9b3361

Ответ 1

Мы не можем создать индексированный вид, отключив цитируемый идентификатор. Я просто попробовал, и SQL 2005 сразу же выдает ошибку, если она отключена:

Невозможно создать индекс. Объект "SmartListVW" был создан со следующими параметрами SET: "QUOTED_IDENTIFIER".

Как сказано в gbn, восстановление индексов должно быть единственным способом, которым он был отключен.

Я видел много статей, в которых говорится, что он должен быть включен, прежде чем создавать индекс для просмотров. В противном случае вы получите ошибку при вставке, обновлении таблицы, но тут я могу получить ошибку сразу, поэтому SQL-движок не позволит создавать индекс в представлениях, отключая его, за это msdn link.

Я задал аналогичный вопрос здесь в стеке когда-то...

EDIT

Я отключил глобальный запрос запроса (в редакторе) ANSI и запустил индекс script в новом редакторе, на этот раз он также выдает ту же ошибку. Поэтому ясно, что мы не можем создавать индексы на представлениях, отключая quoted_identifier.

Ответ 2

Чтобы избежать этой ошибки, мне нужно было добавить

SET ANSI_NULLS, QUOTED_IDENTIFIER ON;

для всех моих сохраненных процедур, редактирующих таблицу с вычисляемым столбцом.

Вам не нужно добавлять SET внутри процедуры, просто используйте его при создании, например:

SET ANSI_NULLS, QUOTED_IDENTIFIER ON;
GO

CREATE PROCEDURE dbo.proc_myproc
...

Ответ 3

Некоторые мысли:

Индексы были восстановлены? Если вы ведете индексирование с помощью DMO, то quoted_identifier не всегда будет сохранен. Это может быть трудно отследить, и конкретной проблемой является SQL Server 2000 до SP4 или около того.

Тем не менее, я видел на SQL Server 2005 также некоторое время назад.

Ответ 4

Я опаздываю на эту вечеринку, но имею эту ошибку и хочу поделиться ею.

Наша проблема была периодической, но случайной, поэтому мы знали, что это не объект, который был создан неправильно.

Наконец, мы отследили его до соединения ODBC на одном из серверов нашей фермы Citrix. На этом сервере у ODBC был отключен QUOTED_IDENTIFIERS (непроверенный). На всех остальных серверах он был проверен как ожидалось. Мы включили эту опцию, и проблема была мгновенно решена.

Ответ 5

Сегодня я получил эту ошибку, выполнив хранимую процедуру в SSMS. Отключение от сервера и повторное подключение к новому сеансу решили проблему для меня. У SP, с которой я работал, никогда не было этой проблемы.