TableName的Case语句

时间:2014-09-19 08:37:53

标签: sql-server stored-procedures

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

首先是我尝试将Table name设置为变量。

Create Procedure Proc_Test
@Tblname varchar(20)
AS BEGIN

Update @Tblname
Set IsValid = 1;

End

这失败了。

其次我尝试的是案例陈述

创建程序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

END

这也引发了异常。

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

2 个答案:

答案 0 :(得分:4)

如果希望表名是可变的,则需要使用动态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

动态Sql方法

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

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

execute sp_executesql @SQLString

答案 1 :(得分:1)

试试这个 -

CREATE PROCEDURE Proc_Test
@Tblname VARCHAR(20)
AS 

BEGIN
DECLARE @SQL varchar(1000);
SET @SQL = 'Update '+@Tblname+' Set IsValid = 1;'
EXECUTE (@SQL);
END