2012-10-01 41 views
0

我目前有一个表有四列 - 我想添加第五列,但有一些麻烦。改变SQL表添加列

我在SQL Server工作室管理2008年打开表,我添加像这样的列信息:

CREATE TABLE [dbo].[Case] 
(
    CaseId     UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    CaseNumber    NVARCHAR(50) NOT NULL, 
    CourtId     INT NOT NULL, 
    DateOpened    DATETIME NOT NULL, 
) 

我另外:

CREATE TABLE [dbo].[Case] 
(
    CaseId     UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    CaseNumber    NVARCHAR(50) NOT NULL, 
    CaseName    NVARCHAR(50), 
    CourtId     INT NOT NULL, 
    DateOpened    DATETIME NOT NULL, 
) 

加入CaseName柱之后,我尝试执行表在Management Studio中,但我得到了错误消息“数据库中已经有一个名为'Case'的对象。” 我试着保存,然后建立我的数据库,希望列将被添加,但这是不成功的。我尝试了一个新的查询并且写了'Alter table'case“添加了CaseName nvarchar(50),但是没有运气。它显示该文件与新列一起更改,因为我保存了它,但是在构建我的整体数据库之后,它没有做任何更改。任何有用的提示都会很棒。

+0

@LittleBobbyTables对不起,我只是错过了添加DateOpened在我的代码的第二部分。我想添加CaseName列。谢谢 – Masriyah

回答

1

使用一个Alter table语句而不是Create

如果你不能得到Alter语句出于某种原因,你也可以drop现有的表和create一个新的新领域,但所有的现有的行将会丢失。

如果您使用的是SSMS,您可以使用Design表而不是Edit添加该列。

+0

我试过这样做,但我的问题是,当我尝试执行它不会更新与更改表和当我建立我的数据库表的变化被忽略。 – Masriyah

+0

@Amina - 定义“当我建立我的数据库时”的意思 - 你在这里使用了其他一些你没有提到的工具吗? –

+0

@Damien_The_Unbeliever好的,所以我有所有这些表和存储过程,我做了存储过程或表的任何更改,我必须构建整个数据库并加载信息。这里是我相信我的问题是 - 当我构建我对表格的新更改不覆盖旧表格的信息时(Case表格添加了新的CaseName列) – Masriyah

6

你想ALTER,如下:

ALTER TABLE [dbo].[Case] ADD CaseName NVARCHAR(50) 

更重要的是,你可以检查柱是否存在等第一:

if not exists (SELECT 1 FROM sysobjects INNER JOIN syscolumns ON 
    sysobjects.id = syscolumns.id 
    WHERE sysobjects.name = N'Case' AND syscolumns.name = N'CaseName') 
ALTER TABLE [dbo].[Case] ADD CaseName NVARCHAR(50) 
+0

CASE是SQL Server中T-SQL中的关键字,应用引号括起来。 – Vikdor

+0

@Vikdor - 你说得对,我完全忽略了这一点。 – LittleBobbyTables

+0

有没有一种方法(语法)来改变cmd提示屏幕中的表格? - 我目前正在尝试这个,并建立我的数据库,并希望这个改变将通过 – Masriyah

0

你应该试试这个

ALTER TABLE [dbo].[Case] 

    ADD CaseName NVARCHAR(50) 

您正在尝试创建另一个表Case,但其中一个已经存在,这就是为什么您你有错误。当你想要编辑的表格,你必须使用Alter table

0

ALTER是你需要调查什么(F1

另一种选择是。
创建新表从现有表

CREATE TABLE [dbo].[Case2] 
(
    CaseId     UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    CaseNumber    NVARCHAR(50) NOT NULL, 
    CourtId     INT NOT NULL, 
    DateOpened    DATETIME NOT NULL, 
newcolumn    INT NULL  
) 

移动数据到新的一个

INSERT INTO [dbo].[Case2] 
SELECT * FROM [dbo].[Case] 

然后

DROP TABLE [dbo].[Case] 

然后在Management Studio中右键单击 '案例2' 并重新命名为'Case'

0

我建议检查existe添加该列之前,在使用迁移脚本时尤其重要。

下面是我平时做:

IF NOT EXISTS(SELECT * FROM sys.columns WHERE Name = N'ColumnName' AND Object_ID = Object_ID(N'TableName')) 
BEGIN 
    ALTER TABLE [dbo].TableName ADD ColumnName NVARCHAR(512) null 
END