Ifølge BOL :
For at oprette en tabel med en vedvarende, beregnet kolonne, skal følgende forbindelsesindstillinger være aktiveret:
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
Disse værdier er indstillet på databaseniveau og kan ses ved hjælp af:
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
Men SET-indstillingerne kan også indstilles af klientapplikationen opretter forbindelse til SQL Server.
Et perfekt eksempel er SQL Server Management Studio, som har standardværdierne for SET ANSI_NULLS og SET QUOTED_IDENTIFIER begge til ON. Dette er en af grundene til, at jeg i første omgang ikke kunne duplikere den fejl, du postede.
Uanset hvad, for at duplikere fejlen, prøv dette (dette vil tilsidesætte standardindstillingerne for 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
)
Du kan rette testsagen ovenfor ved at bruge:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Jeg vil anbefale at justere disse to indstillinger i dit script før oprettelsen af tabellen og relaterede indekser.