SQL Server – использование котировального идентификатора ON, OFF и Getdate ()

У меня проблема с моим скриптом SQL , пожалуйста, помогите мне.

Пример:

У меня есть вставки:

INSERT INTO CUSTOMER (Code, Date) VALUES (1, GETDATE()); 

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

«Msg 1934, уровень 16, состояние 1, сервер HENRIQUE-PC, строка 5 INSERT не удалось, потому что следующие параметры SET имеют неправильные настройки: « QUOTED _IDENTIFIER » . Убедитесь, что параметры SET верны для использования с индексированными представлениями и / или индексами на вычисленном столбцы и / или отфильтрованные индексы и / или запросы notificatio ns и / или методы типа данных XML и / или операции пространственного индекса. ".

Теперь, когда я использовал SET QUOTED_IDENTIFIER ON , моя вставка выполнена с успехом.

Пример:

 SET QUOTED_IDENTIFIER OFF GO INSERT INTO CUSTOMER (Code, Date) VALUES (1, GETDATE()); SET QUOTED_IDENTIFIER ON GO 

(Затронуты 1 ряд)

Какие отношения между GETDATE() и QUOTED IDENTIFIER ?

Почему в этом случае мне нужно использовать QUOTED IDENTIFIER ?

Я считаю, что это из-за getdate. Зачем?

Благодарю.

Энрике Мелисио

Энрике,

Причина, по которой вы получаете эту ошибку, не связана с GETDATE() , она связана с индексами в столбцах из вашей таблицы CUSTOMER . Этот бит из документа SQL SQL Server 2008 SET Statements (Transact-SQL) объясняет проблему более подробно:

Когда вы создаете и обрабатываете индексы в вычисленных столбцах или индексированных представлениях, параметры SET ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER, ANSI_NULLS, ANSI_PADDING и ANSI_WARNINGS должны быть установлены в положение ON. Параметр NUMERIC_ROUNDABORT должен быть установлен в положение OFF.

Если какой-либо из этих параметров не настроен на требуемые значения, действия INSERT, UPDATE, DELETE, DBCC CHECKDB и DBCC CHECKTABLE для индексированных представлений или таблиц с индексами на вычисленных столбцах не будут выполнены. SQL Server вызывает ошибку, в которой перечислены все параметры, которые были неправильно установлены. Кроме того, SQL Server будет обрабатывать операторы SELECT в этих таблицах или индексированные представления, как если бы индексы на вычисленных столбцах или на представлениях не существовали.

Давайте будем гением компьютера.