2013-04-26 24 views
0

我需要向現有表中添加一列,然後爲現有記錄插入適當的列值。我需要在單個存儲過程中完成此操作。創建後直接更改列值(在單個存儲過程中)

到目前爲止,我有以下的(SQL Management Studio中報告說,它無法找到,以便將值添加到現有記錄新列):

BEGIN 
    ALTER TABLE tbl1 
    ADD col_add int 

    UPDATE tbl1 
    SET [col_add]='value' 
    WHERE col_pk = 1 
    END 

我已經嘗試添加一個「GO」關鍵字在ALTER和UPDATE語句之間,但會報告語法錯誤。

在此先感謝。

回答

2

我認爲你必須提交你的「更改表」,然後做你的更新,不要忘記提交您的更新太:解析期間發生

BEGIN 
    BEGIN TRAN 
    ALTER TABLE tbl1 
    ADD col_add date 
COMMIT; 
    BEGIN TRAN 
    UPDATE tbl1 
    SET [col_add]='value' 
    WHERE col_pk = 1 
COMMIT; 
    END 
+0

這是半路那裏,但你需要用'BEGIN TRAN'之前,你可以提交你開始交易他們 – GarethD 2013-04-26 12:25:26

+0

如果你一個接一個地提交,那真的需要嗎?也許如果你做'改變','更新'然後提交,你必須添加事務,但我不認爲如果你做'改變''提交''更新''提交',你需要事務。也許我錯了,但... – 2013-04-26 12:28:42

+0

是的,它是必要的,測試它。該過程將在沒有'BEGIN TRAN'的情況下編譯,但運行時會出現錯誤。有一個測試腳本[here](http://sqlfiddle.com/#!3/0ed4a/1),它不會因爲SQL Fiddle的權限而運行,但您可以在數據庫中嘗試它。如果取消註釋'BEGIN TRAN'行,您將看到該過程運行時沒有錯誤(如果運行一次)。 – GarethD 2013-04-26 12:38:32

2

表名稱錯誤。在SSMS中,go起作用,因爲它將批次分開。但是存儲過程總是一個批次。

您可以使用execsp_executesql迫使新一輪存儲過程中解析:

exec ('UPDATE tbl1 SET [col_add]='value' WHERE col_pk = 1')