Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 数据库创建过程中的标识问题_Sql Server_Identity_Database Create - Fatal编程技术网

Sql server 数据库创建过程中的标识问题

Sql server 数据库创建过程中的标识问题,sql-server,identity,database-create,Sql Server,Identity,Database Create,使用SQLServerManagementStudio,我的问题源于数据库创建脚本。编写脚本是为了创建数据库,其中许多表都有一个标识列: CREATE TABLE Workshop ( WorkshopID int IDENTITY, WorkshopName varchar(40) NOT NULL, Description varchar(800), CONSTRAINT PK_Workshop PRIMARY KEY (WorkshopID) ); 我的问

使用SQLServerManagementStudio,我的问题源于数据库创建脚本。编写脚本是为了创建数据库,其中许多表都有一个标识列:

CREATE TABLE Workshop
(
    WorkshopID int IDENTITY,
    WorkshopName varchar(40) NOT NULL,
    Description varchar(800),
    CONSTRAINT PK_Workshop PRIMARY KEY (WorkshopID)
);
我的问题是,即使脚本简单地创建了一个列作为标识列,但在脚本运行之后,应该是标识列的列中没有一个实际将该列设置为标识列

澄清:运行上述代码将按照指定创建该表,除非WorkshopID不是标识列


需要更改哪些内容才能使脚本按编写的方式工作?

仅供参考,如果您使用SQL Management Studio的设计器为此生成脚本,则生成的脚本如下:

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Table_1
    (
    WorkshopID int NOT NULL IDENTITY (1, 1),
    WorkshopName varchar(40) NOT NULL,
    Description varchar(800) NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Table_1 ADD CONSTRAINT
    PK_Table_1 PRIMARY KEY CLUSTERED 
    (
    WorkshopID
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,   ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
ALTER TABLE dbo.Table_1 SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
如果您创建表,然后使用“创建到…”命令对其编写脚本。。。菜单选项您将获得完全不同的脚本:

USE [MyDatabase]
GO

/****** Object:  Table [dbo].[Workshop]    Script Date: 11/27/2012 14:05:33 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Workshop](
    [WorkshopID] [int] IDENTITY(1,1) NOT NULL,
    [WorkshopName] [varchar](40) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [Description] [varchar](800) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_Workshop] PRIMARY KEY CLUSTERED 
(
    [WorkshopID] 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

如何验证
WorkshopID
不是
IDENTITY
列?在一个管理数据库的程序出现错误后,我进入SSMS,查看了表的设计,所有本应为IDENTITY列的列的列属性中的“(is IDENTITY)”设置为“否”。好的,您在SSMS中运行了脚本,并且在运行脚本之后(以及在运行程序或执行任何其他操作之前),您是否验证了表是在没有identity属性的情况下创建的,即使您的脚本要求这样做并且脚本成功运行?您确定它没有生成您忽略的错误,并且您在正在检查的数据库中运行它,并且程序在其中运行吗?我运行了您的脚本,它创建了具有identity属性的表,因此这里有一些信息没有对齐。@AaronBertrand我还通过刷新对象资源管理器,然后在看到Kelly描述的相同行为时打开表上的Design视图来检查标识。我想知道我们看到的是SSMS刷新中的间歇性错误,而不是表创建中的失败?@JamieSee我无法复制,也无法找到任何现有的错误。您正在使用哪个版本的Management Studio?您应用过任何service Pack吗?没有,不需要指定
非空
,特别是当它通过
主键强制执行时。虽然不是必需的,但我建议始终添加种子值和增量值
创建表车间(WorkshopID int IDENTITY(1,1)非空,WorkshopName varchar(40)不为空,说明varchar(800),约束PK_车间主键(WorkshopID))
@Nic尽管如此,这些建议都没有解决实际问题。@AaronBertrand实际上NOT NULL是必需的,因为您将看到是否同时运行这两个脚本。在发布之前,我在SQL 2008 R2中正是这样做的。这可能是因为强制NOT NULL行为的约束的创建在初始创建后得到了处理?@JamieSee我不确定我是否理解你所说的
是必要的
。我能够使用问题中的脚本创建一个表,并且该表具有identity属性,它可以正常工作。我在任何时候都不需要说
not NULL
。。。