-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
4

1 に答える 1

4

列が最初の部分に追加された場合にのみ、2番目の部分を実行する必要があります...同じbegin-endブロックに配置します。ただし、列の存在はコンパイル時にチェックされるため、動的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;
于 2012-12-04T08:54:34.673 に答える