您的位置:首页 > 数据库

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

2012-06-12 13:13 555 查看
今天遇到一个问题,需要在存储过程中执行一段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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: