Jon*_*ood 34 sql-server database-project sql-server-2008
我们使用Visual Studio和数据库项目来生成我们的数据库.
我刚刚进行了一些数据库更改(包括添加一个名为的新表Correspondence)将这些更改导入到数据库项目中,并尝试部署(重建)数据库.
当我这样做时,我收到以下错误:
创建[dbo].[通信] ...消息1934,级别16,状态1,服务器(服务器名称),行1 CREATE TABLE失败,因为以下SET选项具有不正确的设置:'ANSI_WARNINGS,ANSI_PADDING'.验证SET选项是否正确,以便与计算列和/或筛选索引和/或查询通知和/或XML数据类型方法和/或空间索引操作的索引视图和/或索引一起使用.
任何人都可以向我解释这个错误,并帮我解决它?这是数据库项目用于创建此表的脚本.
PRINT N'Creating [dbo].[Correspondence]...';
GO
SET ANSI_NULLS, QUOTED_IDENTIFIER ON;
GO
CREATE TABLE [dbo].[Correspondence] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[WorkbookId] INT NOT NULL,
[ProviderId] UNIQUEIDENTIFIER NOT NULL,
[MessageThreadId] INT NOT NULL,
[MessageThreadType] AS ((1)) PERSISTED NOT NULL
);
GO
SET ANSI_NULLS, QUOTED_IDENTIFIER OFF;
GO
PRINT N'Creating PK_Correspondence...';
GO
ALTER TABLE [dbo].[Correspondence]
ADD CONSTRAINT [PK_Correspondence] PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF,
IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
GO
Run Code Online (Sandbox Code Playgroud)
8kb*_*8kb 80
根据BOL:
计算列上的索引视图和索引将结果存储在数据库中供以后参考.仅当引用索引视图或索引计算列的所有连接都可以生成与创建索引的连接相同的结果集时,存储的结果才有效.
要创建具有持久计算列的表,必须启用以下连接设置:
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
Run Code Online (Sandbox Code Playgroud)
这些值在数据库级别设置,可以使用以下方法查看:
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
Run Code Online (Sandbox Code Playgroud)
但是,SET选项也可以由连接到SQL Server 的客户端应用程序设置.
一个完美的例子是SQL Server Management Studio,它将SET ANSI_NULLS和SET QUOTED_IDENTIFIER的默认值都设置为ON.这是我最初无法复制您发布的错误的原因之一.
无论如何,要复制错误,请尝试此操作(这将覆盖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
)
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法修复上面的测试用例:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Run Code Online (Sandbox Code Playgroud)
我建议在创建表和相关索引之前在脚本中调整这两个设置.
| 归档时间: |
|
| 查看次数: |
113301 次 |
| 最近记录: |