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

'Forkert SET Options'-fejl ved opbygning af databaseprojekt

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.



  1. Importfejl under kørsel af cgi-bin på localhost - udefineret symbol:lo_truncate64

  2. Sådan fjerner du førende hvidt mellemrum i SQL Server – LTRIM()

  3. SPSS og PHP/MySQL integration

  4. MySQL rollback på MyISAM-motoren