更改SQL表以添加列

时间:2012-10-01 17:39:35

标签: sql sql-server database

我目前有一个包含四列的表格 - 我想添加第五列但有些麻烦。

我在sql server studio management 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'案例“添加CaseName nvarchar(50)但又没有运气。它显示该文件是使用新列更改的,因为我保存了它但在构建我的整个数据库之后它没有进行任何更改。任何有用的提示都会很棒。

5 个答案:

答案 0 :(得分:8)

您想要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)

答案 1 :(得分:1)

使用Alter table语句代替Create

如果由于某种原因导致Alter声明无效,您还可以drop现有表格,create新字段与新字段,但所有你的现有的行将丢失。

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

答案 2 :(得分:0)

你应该试试这个

 ALTER TABLE [dbo].[Case]

    ADD CaseName NVARCHAR(50)

您正在尝试创建另一个表Case,但已存在一个表,这就是您遇到错误的原因。如果要编辑表格,则必须使用Alter table

答案 3 :(得分: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]

然后在管理工作室中右键单击“Case2”并将其重命名为“Case”

答案 4 :(得分:0)

我建议在添加列之前检查列是否存在,尤其在使用迁移脚本时非常重要。

以下是我通常的做法:

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