Secondo BOL :
Per creare una tabella con una colonna calcolata e persistente, è necessario abilitare le seguenti impostazioni di connessione:
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
Questi valori sono impostati a livello di database e possono essere visualizzati utilizzando:
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
Tuttavia, le opzioni SET possono essere impostate anche dall'applicazione client connessione a SQL Server.
Un esempio perfetto è SQL Server Management Studio che ha i valori predefiniti per SET ANSI_NULLS e SET QUOTED_IDENTIFIER entrambi su ON. Questo è uno dei motivi per cui inizialmente non ho potuto duplicare l'errore che hai pubblicato.
Ad ogni modo, per duplicare l'errore, prova questo (questo sovrascriverà le impostazioni predefinite di 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
)
Puoi correggere il test case sopra utilizzando:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Consiglierei di modificare queste due impostazioni nello script prima della creazione della tabella e dei relativi indici.