Според 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
Бих препоръчал да промените тези две настройки във вашия скрипт преди създаването на таблицата и свързаните индекси.