Согласно BOL :
Индексированные представления и индексы для вычисляемых столбцов сохраняют результаты в базе данных для последующего использования.Сохраненные результаты действительны только в том случае, если все соединения, относящиеся к индексированному представлению или индексированному вычисляемому столбцу, могут генерировать тот же набор результатов, что и соединение, создавшее индекс.
Для создания таблицы с сохраненнымВ вычисляемом столбце должны быть включены следующие параметры подключения:
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT ON
SET QUOTED_IDENTIFIER ON
Эти значения устанавливаются на уровне базы данных и могут быть просмотрены с помощью:
SELECT
is_ansi_nulls_on,
is_ansi_padding_on,
is_ansi_warnings_on,
is_arithabort_on,
is_concat_null_yields_null_on,
is_numeric_roundabort_on,
is_quoted_identifier_on
FROM sys.databases
Однако Параметры SET также могут быть установлены клиентским приложением , подключающимся к SQL Server.
Прекрасным примером является SQL Server Management Studio, в котором значения по умолчанию для SET ANSI_NULLS и SET QUOTED_IDENTIFIER установлены в ON.Это одна из причин, почему я не смог изначально дублировать ошибку, которую вы опубликовали.
В любом случае, попробуйте повторить ошибку (это переопределит настройки SSMS по умолчанию):
SET ANSI_NULLS ON
SET ANSI_PADDING OFF
SET ANSI_WARNINGS OFF
SET ARITHABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE T1 (
ID INT NOT NULL,
TypeVal AS ((1)) PERSISTED NOT NULL
)
Вы можете исправить приведенный выше тестовый пример, используя:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Я бы рекомендовал настроить эти две настройки в вашем скрипте перед созданием таблицы и связанных с ней индексов.