2013-04-01 53 views
14

我有一個需求,我需要改變(添加2列),然後更新同一個表。alter table然後更新單語句

這裏是我試過的查詢:

ALTER TABLE A 
ADD c1 int,c2 varchar(10) 

UPDATE A set c1 = 23, c2 = 'ZZXX' 

我需要在同一時間運行上面的兩個查詢。

我正在使用Talend ETL工具,在此我們有一個組件tMssqlrow,它允許我們運行多個查詢(我在單個組件中使用10到15個更新查詢)。

但上述查詢不起作用。

我在DataBase Microsoft SQL中測試過。我得到下面的錯誤:

消息207,級別16,狀態1,5號線

無效列名 'C1'。消息207,

級別16,狀態1,行5

無效列名 'C2'。

任何人都可以幫我解決這個問題。

+2

加上'GO'。 –

+0

如果我們在MSSQL中使用它,它正在工作,但我不能用在talend,talend是throghing error ::語法錯誤附近去 – Raghunath

回答

24

在單個語句(或批處理)中,您無法完全按正確,而且您似乎正在使用的工具不支持GO作爲批分隔符。

雖然可以使用EXEC在子批處理中運行它。

ALTER TABLE A 
    ADD c1 INT, c2 VARCHAR(10); 

EXEC(' 
UPDATE A 
SET c1 = 23, 
     c2 = ''ZZXX''; 
    '); 

注:在查詢所有的單引號必須如上彎了腰逃脫他們一個字符串內。

或者,您也可以藉助某些默認約束條件在單個語句中獲得類似的結果。

ALTER TABLE A 
    ADD c1 INT NULL CONSTRAINT DF_A_c1 DEFAULT 23 WITH VALUES, 
    c2 VARCHAR(10) CONSTRAINT DF_A_c2 NULL DEFAULT 'ZZXX' WITH VALUES; 

但是,這並不完全一樣作爲默認的約束將被拋在後面,可能需要被丟棄原來的查詢。

+0

謝謝你這種方法正在工作。 – Raghunath

+1

+1。 @ 123456如果此解決方案回答您的問題,請將此答案標記爲已接受:-) – Sepster

0

在兩次查詢之間使用GO。

-1

嘗試`ALTER`語句之後這個

ALTER TABLE A ADD c1 int,c2 varchar(10) 

GO 

UPDATE A set c1 = 23, c2 = 'ZZXX' 

GO