sql >> Databasteknik >  >> RDS >> Sqlserver

Fel "Inkorrekta SET-alternativ" när du bygger databasprojekt

Enligt BOL :

För att skapa en tabell med en beständig, beräknad kolumn måste följande anslutningsinställningar vara aktiverade:

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

Dessa värden är inställda på databasnivå och kan ses med:

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-alternativen kan också ställas in av klientapplikationen ansluter till SQL Server.

Ett perfekt exempel är SQL Server Management Studio som har standardvärdena för SET ANSI_NULLS och SET QUOTED_IDENTIFIER båda till ON. Detta är en av anledningarna till att jag först inte kunde duplicera felet du postade.

Hur som helst, för att duplicera felet, försök detta (detta kommer att åsidosätta standardinställningarna för 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 fixa testfallet ovan genom att använda:

SET ANSI_PADDING ON
SET ANSI_WARNINGS ON

Jag skulle rekommendera att du justerar dessa två inställningar i ditt skript innan du skapar tabellen och relaterade index.



  1. Hur man kontrollerar apostrof med where-klausul med mysql

  2. Relationsöversättningar finns inte efter migrering till Rails 3.2.1

  3. MySQL Store Image BLOB Dålig praxis prestanda

  4. Codeigniter-modell med flera uppdateringsvillkor med hjälp av manual where-sats