我想使用CASE语句来决定更新哪个表...
即
IF (@existingStep = 1)
BEGIN
UPDATE
CASE @tableToUpdate
WHEN 'TemplateActionSettings' THEN TemplateActionSetting SET blah blah blah
WHEN 'ETC' THEN --DO THIS ONE
END
CASE可以这种方式使用吗?
答案 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