SQL CASE语句选择要更新的表

时间:2012-04-18 14:32:34

标签: sql-server tsql

我想使用CASE语句来决定更新哪个表...

IF (@existingStep = 1)
 BEGIN  
   UPDATE 
    CASE @tableToUpdate
      WHEN 'TemplateActionSettings' THEN TemplateActionSetting SET blah blah blah

    WHEN 'ETC' THEN --DO THIS ONE

 END

CASE可以这种方式使用吗?

5 个答案:

答案 0 :(得分:4)

您可以使用IF来获得类似的东西

IF @TableToUpdate = 'Table1'
BEGIN
UPDATE U SET Col = 'Val' FROM Table1 AS U WHERE something = something
END
ELSE IF @TableToUpdate = 'Table2'
BEGIN
UPDATE U SET Col1 = 'Val' FROM Table2 AS U WHERE something = something
END

答案 1 :(得分:2)

不,不幸的是,CASE不能像这样使用。

答案 2 :(得分:2)

不,你不能在直接的SQL语句中使用该案例。您将不得不使用过程语言来完成此任务。我假设您使用的是RDMS。

答案 3 :(得分:1)

除非使用动态查询(例如:string concat后跟SQL服务器样式中的execute),否则不能在SQL中执行此操作。每个DML语句都必须标识它正在运行的对象(即表)。

答案 4 :(得分:1)

您无法对多个表执行更新语句;除非您可以创建一个跨越所有表的视图,并且仍然可以使用更新。如果您可以创建该视图,则可以对案例使用update,如果未更改,则将数据设置回原始值。如果不是,则需要使用dynamic sql