2012-04-18 62 views
1

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

I.E.

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

    WHEN 'ETC' THEN --DO THIS ONE 

END 

CASE能以这种方式使用吗?

+2

请标记使用的是 – 2012-04-18 14:34:04

+0

没有什么DBMS,'CASE'不是流控制的声明就像是在一些语言(如Java) 。 'CASE'是一个返回单个标量值的表达式。 – 2012-04-18 15:10:06

回答

2

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

1

除非使用动态查询(例如:字符串concat,后跟SQL Server风格的执行),否则不能在SQL中执行此操作。每个DML语句都必须标识它正在操作的对象(即表)。

1

你不能对这样的多个表执行更新语句;除非您可以创建一个跨越所有表格的视图,并且仍然可以使用更新。如果您可以创建该视图,则可以使用案例更新并将数据恢复为原始值(如果未更改)。如果不是,您将需要使用dynamic sql

+0

并非每个DBMS都具有可更新的视图。 – 2012-04-18 14:38:07

2

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

+0

谢谢大家......这将解释为什么我无法弄清楚语法。雅,我使用TSQL和SSMS。 – 2012-04-18 14:40:38

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 
+0

这正是我要使用的,但认为如果我可以用CASE语句设置它,它会更容易阅读(并节省空间)......谢谢! – 2012-04-18 15:03:35