存储过程中执行sql字符串,给存储过程的变量赋值

来源:互联网 发布:2017网络剧上映时间表 编辑:程序博客网 时间:2024/04/27 14:41

     今天遇到一个问题,需要在存储过程中执行一段sql字符串,并且需要给存储过程的变量赋值。

开始写的代码如下:

create proc PROC_test
@tablename varchar(20),
@userName varchar(10) output
as 

delcare @baseSql varchar(8000)
set @baseSql='select @userName=name from '+@tablename
exec(@baseSql)
print @userName
上面代码就会报错:必须声明标量变量 "@typeName,原因是exec 执行的字符串是一个单独的整体, @userName并没有在字符串中定义。后来在以前的存储过程中找到了解决方法,利用系统自带的拓展存储过程 sp_executesql可以解决需求,sp_executesql @Sql,N'@userName varchar(80) OUTPUT',@userName OUTPUT -- 参数:1、sql语句;2、定义输出参数;3、接收输出参数

正确的代码如下:

 create proc PROC_test
as

declare @baseSql nvarchar(4000)--类型为ntext/nchar/nvarchar 的参数
,@userName varchar(80)
set @baseSql='select top 1 @userName=typeName from T_Ent_Type'
 
EXEC sp_executesql @baseSql,N'@userName varchar(80) OUTPUT',@userName OUTPUT -- 参数:1、sql语句;2、定义输出参数;3、接收输出参数
print @userName