sql >> Database >  >> RDS >> Sqlserver

Fout 'Onjuiste SET-opties' bij het bouwen van een databaseproject

Volgens BOL :

Om een ​​tabel te maken met een persistente, berekende kolom, moeten de volgende verbindingsinstellingen zijn ingeschakeld:

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

Deze waarden worden ingesteld op databaseniveau en kunnen worden bekeken met:

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

Echter, de SET-opties kunnen ook worden ingesteld door de clienttoepassing verbinding maken met SQL Server.

Een perfect voorbeeld is SQL Server Management Studio, die de standaardwaarden voor SET ANSI_NULLS en SET QUOTED_IDENTIFIER beide op ON heeft staan. Dit is een van de redenen waarom ik de door u geposte fout aanvankelijk niet kon dupliceren.

Hoe dan ook, probeer dit om de fout te dupliceren (dit zal de standaard SSMS-instellingen overschrijven):

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
) 

U kunt de bovenstaande testcase repareren met:

SET ANSI_PADDING ON
SET ANSI_WARNINGS ON

Ik zou aanraden om deze twee instellingen in je script aan te passen voordat je de tabel en gerelateerde indexen maakt.



  1. Nodejs met sequelize konden geen tabel maken in mysql workbench na het starten van de server

  2. Wat is het verschil tussen 'niet in' en 'bestaat niet'?

  3. Rake-specificatie faalt bij de meeste tests, maar rails werken prima op Diaspora-bron

  4. Open de link in een nieuw venster in Crystal Reports