Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Errore "Opzioni SET errate" durante la creazione di un progetto di database

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.