日期:2014-05-18  浏览次数:20523 次

求大师解决一下
ALTER PROCEDURE [dbo].[insertboss]
@a nvarchar(100),
@b nvarchar(100),
@c nvarchar(100)
as
declare @d nvarchar(2000)
begin
set @d='INSERT INTO'+'i_'+@c+'VALUES ('+@a+','+@b+')'
execute sp_executesql @d
end
为什么我运行的时候会提醒
必须声明标量变量 "@a"

------解决方案--------------------
因为你不清楚 sp_executesql 这个存储过程该怎么用
这个存储过程有两个固定的参数,按顺序第一个是要动态执行的sql语句
也就是楼主的@d,第二参数是这个动态sql语句中用到的变量声明字符串,其余的就是每个变量的值
execute后的语句想在单独的批处理里执行,外部声明的变量是不能传递进去的,所以楼主的语句不如不要使用sp_executesql,而直接execute
SQL code

alter procedure [dbo].[insertboss]
@a nvarchar(100),
@b nvarchar(100),
@c nvarchar(100)
as
begin
    declare @d nvarchar(2000);
    set @d = 'insert into' + +'i_' + @c + ' VALUES(' + @a + ',' + @b + ')';
    exec(@d);
end;
go