sql >> Databáze >  >> RDS >> Sqlserver

Chyba 'Nesprávné možnosti SET' při vytváření databázového projektu

Podle BOL :

Chcete-li vytvořit tabulku s trvalým vypočítaným sloupcem, musí být povoleno následující nastavení připojení:

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

Tyto hodnoty se nastavují na úrovni databáze a lze je zobrazit pomocí:

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

Nicméně možnosti SET lze také nastavit klientskou aplikací připojení k serveru SQL.

Dokonalým příkladem je SQL Server Management Studio, které má výchozí hodnoty pro SET ANSI_NULLS a SET QUOTED_IDENTIFIER obě na ON. To je jeden z důvodů, proč jsem nemohl zpočátku duplikovat chybu, kterou jste zveřejnili.

Každopádně, chcete-li chybu duplikovat, zkuste toto (toto přepíše výchozí nastavení 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
) 

Výše uvedený testovací případ můžete opravit pomocí:

SET ANSI_PADDING ON
SET ANSI_WARNINGS ON

Doporučil bych vyladit tato dvě nastavení ve vašem skriptu před vytvořením tabulky a souvisejících indexů.



  1. Je to opravdu dlouhé hlasování?

  2. Průměrná doba operací uložených v databázi

  3. WSJDBCConnection nezalamuje objekty typu Oracle jdbc Connection

  4. Předávání uložené procedury ze serveru SQL Server propojenému serveru ORACLE