2012-11-27 36 views
2

使用SQL Server Management Studio时,我的问题源于数据库创建脚本。脚本编写创建一个数据库,它的很多的表有一个标识列:创建数据库时的身份问题

CREATE TABLE Workshop 
(
    WorkshopID int IDENTITY, 
    WorkshopName varchar(40) NOT NULL, 
    Description varchar(800), 
    CONSTRAINT PK_Workshop PRIMARY KEY (WorkshopID) 
); 

我的问题是,即使剧本显然创建一个列作为一个标识列,该脚本运行后没有任何列应该是身份列实际上已将该列设置为身份。

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

需要改变什么才能使脚本按写入方式工作?

+1

你如何验证'WorkshopID'不是'IDENTITY'列? –

+0

在管理数据库的程序遇到错误之后,我进入SSMS并查看了表的设计,并且所有列的标识列的“(是标识)”的列属性中设置为“否” 。 – Valevalorin

+0

好了,你在SSMS中运行了脚本,并且在运行脚本(并在运行程序或执行其他任何操作之前)之后验证了表是在没有标识属性的情况下创建的,即使脚本说这样做,脚本成功运行?你确定它没有产生你忽略的错误,并且你运行它在你正在检查的同一个数据库中,并且程序运行在?我运行了你的脚本,它创建了带有标识属性的表格,所以有一些信息不在这里排队。 –

回答

0

仅供参考,如果您为这个使用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 
+0

不,不需要“NOT NULL”指定,特别是当它通过'PRIMARY KEY'强制执行时。 –

+0

虽然不要求我总是建议增加你的种子和增量值 'CREATE TABLE车间 ( WorkshopID INT IDENTITY(1,1)NOT NULL, WorkshopName VARCHAR(40)NOT NULL, 描述为varchar(800), CONSTRAINT PK_Workshop PRIMARY KEY(WorkshopID) );' – Nic

+0

@Nic这些建议都没有解决实际问题。 –