Podle BOL :
Chcete-li vytvořit tabulku s trvalým vypočítaným sloupcem, musí být povoleno následující nastavení připojení:
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
Tyto hodnoty se nastavují na úrovni databáze a lze je zobrazit 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
Nicméně možnosti SET lze také nastavit klientskou aplikací připojení k serveru SQL.
Dokonalým příkladem je SQL Server Management Studio, které má výchozí hodnoty pro SET ANSI_NULLS a SET QUOTED_IDENTIFIER obě na ON. To je jeden z důvodů, proč jsem nemohl zpočátku duplikovat chybu, kterou jste zveřejnili.
Každopádně, chcete-li chybu duplikovat, zkuste toto (toto přepíše výchozí nastavení 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
)
Výše uvedený testovací případ můžete opravit pomocí:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Doporučil bych vyladit tato dvě nastavení ve vašem skriptu před vytvořením tabulky a souvisejících indexů.