Volgens BOL :
Om een tabel te maken met een persistente, berekende kolom, moeten de volgende verbindingsinstellingen zijn ingeschakeld:
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
Deze waarden worden ingesteld op databaseniveau en kunnen worden bekeken met:
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
Echter, de SET-opties kunnen ook worden ingesteld door de clienttoepassing verbinding maken met SQL Server.
Een perfect voorbeeld is SQL Server Management Studio, die de standaardwaarden voor SET ANSI_NULLS en SET QUOTED_IDENTIFIER beide op ON heeft staan. Dit is een van de redenen waarom ik de door u geposte fout aanvankelijk niet kon dupliceren.
Hoe dan ook, probeer dit om de fout te dupliceren (dit zal de standaard SSMS-instellingen overschrijven):
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
)
U kunt de bovenstaande testcase repareren met:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Ik zou aanraden om deze twee instellingen in je script aan te passen voordat je de tabel en gerelateerde indexen maakt.