我想使用 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可以这样使用吗?
我想使用 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可以这样使用吗?
您可以使用 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
不,很遗憾 CASE 不能这样使用。
不,您不能在直接的 SQL 语句中使用这种情况。您将不得不使用程序语言来完成此操作。我假设您使用的是 RDMS。
除非您使用动态查询(例如:字符串 concat,然后以 SQL 服务器样式执行),否则您无法在 SQL 中执行此操作。每个 DML 语句必须标识它正在操作的对象(即表)。
您不能像这样对多个表执行更新语句;除非您可以创建一个跨越所有表的视图并且仍然可以使用更新。如果您可以创建该视图,您将对案例使用更新,如果数据未更改,则将数据设置回原始值。如果没有,您将需要使用 动态 sql