Według BOL :
Aby utworzyć tabelę z utrwaloną, obliczaną kolumną, należy włączyć następujące ustawienia połączenia:
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
Wartości te są ustawiane na poziomie bazy danych i można je przeglądać za pomocą:
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
Jednak opcje SET mogą być również ustawione przez aplikację kliencką połączenie z serwerem SQL.
Doskonałym przykładem jest SQL Server Management Studio, w którym wartości domyślne SET ANSI_NULLS i SET QUOTED_IDENTIFIER są ustawione na ON. To jeden z powodów, dla których nie mogłem początkowo powielić błędu, który zamieściłeś.
W każdym razie, aby zduplikować błąd, spróbuj tego (spowoduje to nadpisanie domyślnych ustawień 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
)
Możesz naprawić powyższy przypadek testowy, używając:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Zalecam dostosowanie tych dwóch ustawień w skrypcie przed utworzeniem tabeli i powiązanych indeksów.