1

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

IE

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

    WHEN 'ETC' THEN --DO THIS ONE

 END

CASE可以这样使用吗?

4

5 回答 5

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
于 2012-04-18T14:45:03.463 回答
2

不,很遗憾 CASE 不能这样使用。

于 2012-04-18T14:34:39.250 回答
2

不,您不能在直接的 SQL 语句中使用这种情况。您将不得不使用程序语言来完成此操作。我假设您使用的是 RDMS。

于 2012-04-18T14:35:56.643 回答
1

除非您使用动态查询(例如:字符串 concat,然后以 SQL 服务器样式执行),否则您无法在 SQL 中执行此操作。每个 DML 语句必须标识它正在操作的对象(即表)。

于 2012-04-18T14:35:45.363 回答
1

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

于 2012-04-18T14:35:48.957 回答