Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Erro 'Opções SET incorretas' ao construir o projeto de banco de dados


De acordo com BOL :

Para criar uma tabela com uma coluna computada persistente, as seguintes configurações de conexão devem ser habilitadas:
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

Esses valores são definidos no nível do banco de dados e podem ser visualizados usando:
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

No entanto, as opções SET também podem ser definidas pelo aplicativo cliente conectando ao SQL Server.

Um exemplo perfeito é o SQL Server Management Studio que tem os valores padrão para SET ANSI_NULLS e SET QUOTED_IDENTIFIER ambos como ON. Esta é uma das razões pelas quais não consegui duplicar inicialmente o erro que você postou.

De qualquer forma, para duplicar o erro, tente isto (isso substituirá as configurações padrão do 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
) 

Você pode corrigir o caso de teste acima usando:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON

Eu recomendaria ajustar essas duas configurações em seu script antes da criação da tabela e dos índices relacionados.