我想要创建一个基于发送条件更新表列的存储过程。我写的问题不起作用。
首先,如果我试图将表名设置为变量。
Create Procedure Proc_Test
@Tblname varchar(20)
AS BEGIN
Update @Tblname
Set IsValid = 1;
End这是失败的。
第二,我试过的是案件陈述
创建过程Proc_Test @Tblname varchar(20)作为开始
Case @Tblname
WHEN 1 THEN Update tbl1 set ISValid = 1;
WHEN 2 THEN Update tbl2 set ISValid = 1;
End结束
这也会引发异常。
还有其他方法可以做到这一点吗?
发布于 2014-09-19 08:47:49
如果您希望表名是可变的,则需要使用动态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发布于 2014-09-19 08:45:28
试试这个-
CREATE PROCEDURE Proc_Test
@Tblname VARCHAR(20)
AS
BEGIN
DECLARE @SQL varchar(1000);
SET @SQL = 'Update '+@Tblname+' Set IsValid = 1;'
EXECUTE (@SQL);
ENDhttps://stackoverflow.com/questions/25929698
复制相似问题