2012-10-01 66 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