2012-12-04 31 views
-1

我想將列添加到表中。如果我的腳本的那部分執行,我也想向表中添加一些值。我該怎麼做 ?如何添加新列並有條件插入行(在同一個腳本中)

if not exists (select 1 from sys.columns 
       where object_id = object_id('CAT_MASSUPDATETASKPARAM') 
       and name = 'ValueBoolean') 
    begin 
      alter table CAT_MASSUPDATETASKPARAM add ValueBoolean bit NULL 
    end 
    go 

    IF (the first script was running do this script) 
     INSERT INTO CAT_MASSUPDATETASKPARAM (ParentTaskIK,  
       ParamType,ParamName,ValueInt,ValueStr,ValueBoolean) 
     SELECT ParentTaskIK, 'Boolean','SHOW_CURRENT',NULL,NULL,1 
     FROM CAT_MASSUPDATETASKPARAM ,CAT_MASSUPDATETASK 
     WHERE CAT_MASSUPDATETASKPARAM.ParentTaskIK = CAT_MASSUPDATETASK.Id 
     AND CAT_MASSUPDATETASK.MassUpdateType in ('somthing','somthing1') 
     GROUP BY ParentTaskIK 
go 
+0

你的標題很曖昧.....你可以在身體但具體更具描述在問題標題中? :) – bonCodigo

+0

你有沒有意外的話? :) – Arvo

+0

fyi,修改內容以澄清問題 – Leigh

回答

4

您希望第二部分僅在第一列中添加列時運行...將其放在同一個開始結束塊中。但是你需要動態SQL,因爲在編譯時檢查列的存在。

if not exists (select 1 from sys.columns where object_id =  object_id('CAT_MASSUPDATETASKPARAM') and name = 'ValueBoolean') 
begin 
    alter table CAT_MASSUPDATETASKPARAM add ValueBoolean bit NULL; 
    EXEC (' 
    INSERT INTO CAT_MASSUPDATETASKPARAM (ParentTaskIK, ParamType,ParamName,ValueInt,ValueStr,ValueBoolean) 
     select ParentTaskIK, ''Boolean'',''SHOW_CURRENT'',NULL,NULL,1 
     from CAT_MASSUPDATETASKPARAM ,CAT_MASSUPDATETASK 
     where CAT_MASSUPDATETASKPARAM.ParentTaskIK = CAT_MASSUPDATETASK.Id 
     and CAT_MASSUPDATETASK.MassUpdateType in (''somthing'',''somthing1'') 
     group by ParentTaskIK  '); 
end 
go 

否則在同一會話中,你可以使用一個臨時表或者一些這樣的標記:

if not exists (select 1 from sys.columns where object_id =  object_id('CAT_MASSUPDATETASKPARAM') and name = 'ValueBoolean') 
begin 
    alter table CAT_MASSUPDATETASKPARAM add ValueBoolean bit NULL; 
    create table #marker (id int); 
end; 
GO 
if object_id('tempdb..#marker') is not null 
    INSERT INTO CAT_MASSUPDATETASKPARAM (
     ParentTaskIK,ParamType,ParamName,ValueInt,ValueStr,ValueBoolean) 
    select ParentTaskIK, 'Boolean','SHOW_CURRENT',NULL,NULL,1 
     from CAT_MASSUPDATETASKPARAM ,CAT_MASSUPDATETASK 
     where CAT_MASSUPDATETASKPARAM.ParentTaskIK = CAT_MASSUPDATETASK.Id 
     and CAT_MASSUPDATETASK.MassUpdateType in ('somthing','somthing1') 
     group by ParentTaskIK; 
+0

10x @RichardTheKiwi 我用了第一個anwser –

相關問題