我们使用Visual和一个数据库项目来生成数据库。
我刚刚做了一些数据库更改(包括添加一个名为Correspondence的新表),将这些更改导入数据库项目,并尝试部署(重新构建)数据库。
当我这样做时,我会得到以下错误:
创建dbo.Correspondence..。Msg 1934,级别16,状态1,服务器(服务器名称),第1行CREATE表失败,因为以下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发布于 2012-02-10 22:21:45
根据泡泡的说法:
计算列上的索引视图和索引存储数据库中的结果,供以后参考。只有当引用索引视图或索引计算列的所有连接都可以生成与创建索引的连接相同的结果集时,存储的结果才有效。
为了创建具有持久化计算列的表,必须启用下列连接设置:
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这些值是在数据库级别上设置的,可以使用以下方法查看:
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但是,客户端应用程序也可以设置SET选项。连接到Server。
一个很好的例子是,它具有将ANSI_NULLS和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
) 您可以使用以下方法修复上面的测试用例:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON我建议在创建表和相关索引之前,在脚本中调整这两个设置。
发布于 2016-08-25 12:19:49
在我的例子中,我试图在2012上从一个数据库创建一个表到另一个数据库。右键单击一个表并选择脚本表as > DROP和CREATE > New窗口,创建以下脚本:
USE [SAMPLECOMPANY]
GO
ALTER TABLE [dbo].[Employees] DROP CONSTRAINT [FK_Employees_Departments]
GO
/****** Object: Table [dbo].[Employees] Script Date: 8/24/2016 9:31:15 PM ******/
DROP TABLE [dbo].[Employees]
GO
/****** Object: Table [dbo].[Employees] Script Date: 8/24/2016 9:31:15 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Employees](
[EmployeeId] [int] IDENTITY(1,1) NOT NULL,
[DepartmentId] [int] NOT NULL,
[FullName] [varchar](50) NOT NULL,
[HireDate] [datetime] NULL
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
[EmployeeId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Employees] WITH CHECK ADD CONSTRAINT [FK_Employees_Departments] FOREIGN KEY([DepartmentId])
REFERENCES [dbo].[Departments] ([DepartmentID])
GO
ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [FK_Employees_Departments]
GO但是,在执行上面的脚本时,它返回了错误:
选择“失败”,因为以下SET选项的设置不正确:“ANSI_PADDING”。验证SET选项是否正确用于计算列和/或筛选索引和/或查询通知和/或XML数据类型方法和/或空间索引操作上的索引视图和/或索引。
我找到的解决方案是:启用脚本顶部的设置,如下所示:
USE [SAMPLECOMPANY]
GO
/****** Object: Table [dbo].[Employees] Script Date: 8/24/2016 9:31:15 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
ALTER TABLE [dbo].[Employees] DROP CONSTRAINT [FK_Employees_Departments]
GO
/****** Object: Table [dbo].[Employees] Script Date: 8/24/2016 9:31:15 PM ******/
DROP TABLE [dbo].[Employees]
GO
CREATE TABLE [dbo].[Employees](
[EmployeeId] [int] IDENTITY(1,1) NOT NULL,
[DepartmentId] [int] NOT NULL,
[FullName] [varchar](50) NOT NULL,
[HireDate] [datetime] NULL
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
[EmployeeId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Employees] WITH CHECK ADD CONSTRAINT [FK_Employees_Departments] FOREIGN KEY([DepartmentId])
REFERENCES [dbo].[Departments] ([DepartmentID])
GO
ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [FK_Employees_Departments]
GO
SET ANSI_PADDING OFF
GO希望能帮上忙。
发布于 2017-03-16 17:23:41
对我来说,仅仅将兼容性级别设置为更高级别就可以了。要查看C.Level:
select compatibility_level from sys.databases where name = [your_database]https://stackoverflow.com/questions/9235527
复制相似问题