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.需要帮助。在此先感谢!!!
答案 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