Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fehler „Falsche SET-Optionen“ beim Erstellen eines Datenbankprojekts

Gemäß BOL :

Um eine Tabelle mit einer persistenten, berechneten Spalte zu erstellen, müssen die folgenden Verbindungseinstellungen aktiviert sein:

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

Diese Werte werden auf Datenbankebene festgelegt und können angezeigt werden mit:

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

Jedoch die SET-Optionen können auch von der Client-Anwendung gesetzt werden Verbindung mit SQL Server.

Ein perfektes Beispiel ist SQL Server Management Studio, das die Standardwerte für SET ANSI_NULLS und SET QUOTED_IDENTIFIER beide auf ON hat. Dies ist einer der Gründe, warum ich den von Ihnen geposteten Fehler zunächst nicht duplizieren konnte.

Wie auch immer, um den Fehler zu duplizieren, versuchen Sie Folgendes (dies überschreibt die SSMS-Standardeinstellungen):

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
) 

Sie können den obigen Testfall beheben, indem Sie Folgendes verwenden:

SET ANSI_PADDING ON
SET ANSI_WARNINGS ON

Ich würde empfehlen, diese beiden Einstellungen in Ihrem Skript zu optimieren, bevor Sie die Tabelle und die zugehörigen Indizes erstellen.