TableName 的 Case 语句

use*_*973 0 sql-server stored-procedures

我想创建一个存储过程,它根据发送的条件更新表列。我写的查询不起作用。

首先是如果我尝试将表名设置为变量。

Create Procedure Proc_Test
@Tblname varchar(20)
AS BEGIN

Update @Tblname
Set IsValid = 1;

End
Run Code Online (Sandbox Code Playgroud)

这失败了。

我尝试过的第二个是 case 语句

创建过程 Proc_Test @Tblname varchar(20) AS BEGIN

Case @Tblname 
WHEN 1 THEN Update tbl1 set ISValid = 1;

WHEN 2 THEN Update tbl2 set ISValid = 1;

End
Run Code Online (Sandbox Code Playgroud)

结尾

这也抛出异常。

任何其他方式来实现这一目标?

Tan*_*ner 5

如果你希望表名是可变的,你需要使用动态sql,否则你需要使用条件语句根据表名进行过滤,如果没有太多的表名需要处理就可以了。

条件法

declare @Tblname varchar(20) = 'Table1'

if @Tblname = 'Table1'
begin
    update Table1
    set IsValid = 1
    -- where some condition is met?
end

if @Tblname = 'Table2'
begin
    update Table2
    set IsValid = 1
    -- where some condition is met?
end
Run Code Online (Sandbox Code Playgroud)

动态Sql方法

declare @SQLString nvarchar(100);
declare @Tblname varchar(20) = 'Table1'

set @SQLString = N'update ' + @Tblname + ' set IsValid = 1';

execute sp_executesql @SQLString
Run Code Online (Sandbox Code Playgroud)