2012-11-27 38 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這些建議都沒有解決實際問題。 –