存储过程中执行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
开始写的代码如下:
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
相关文章推荐
- Oracle 在函数或存储过程中执行sql查询字符串并将结果值赋值给变量
- 执行字符串SQL语句--带有参数的存储过程以及 int类型的字符串变量注意事项
- [PL/SQL]测试存储过程执行超长SQL(使用CLOB变量)
- mysql 存储过程动态拼接sql并执行赋值
- sql在所有存储过程中查询包含某字符串的执行语句
- 关于 字符串中的单引号, 在sql存储过程中的传输总结; 逗号分隔的多个变量提取方法.
- MYSQL存储过程执行用字符串拼成的sql语句
- MySql存储过程中执行动态SQL(表名是变量)
- oralce存储过程拼接sql字符串,并执行sql字符串给变量赋值
- 动态sql,单引号连接变量在存储过程内执行.
- 生成SQL语句字符串,通过存储过程执行
- 存储过程中将sql语句结果赋值给变量
- 存储过程中sql语句按变量进行判断执行相应的查询条件
- 存储过程返回参数的方法(也是执行动态sql 实现列名成为变量的功能)
- [PL/SQL]测试存储过程执行超长SQL(使用CLOB变量)
- SQL存储过程中SELECT与SET 对变量赋值的区别
- 存储过程————执行拼接的SQL语句的字符串
- 用于执行(计算) "字符串表达式" 的 T-SQL 存储过程
- sql2005与sql2008存储过程中 变量使用的一处区别
- 【xp_sqlagent_enum_jobs】取得SQL Server 作业执行状态的存储过程。