SQL存储过程中的动态表名称和参数

时间:2017-02-11 09:07:19

标签: sql sql-server stored-procedures sql-server-2012

create procedure dbo.move_pos
(
@id int,
@tbl varchar(50)
)    
as    
begin    
declare @pos int    
exec('select '+@pos+'=POS from '+@tbl+' where id='+@id)    
exec('update '+@tbl+'  set POS=POS+1 where POS<'+@pos)    
end

在上面的过程列中,POS的类型为int。但是,当我执行此过程时,它显示以下错误:

  

Msg 102,Level 15,State 1,Line 1

     

'='附近的语法不正确。

我正在使用SQL SERVER 2012.需要帮助。在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

我建议重新考虑所有这些动态的sql存储过程 但是,如果你真的必须使用动态sql,那么试试这个:

create procedure dbo.move_pos
(
    @id int,
    @tbl varchar(50)
)    
as    
begin    
declare @sql nvarchar(max);
set @sql = 'update ' + QUOTENAME(@tbl) + '
            set POS = POS + 1 
            where POS < (
                select POS 
                from ' + QUOTENAME(@tbl) + ' 
                where id = '+ cast(@id as nvarchar(10)
            )'

exec(@sql)    
end