执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法

来源:互联网 发布:自学java看什么视频 编辑:程序博客网 时间:2024/05/22 03:41

sp_executesql  过程与 exec 关键字区别
sp_executesql  可以在动态 sql 中使用变量,并且将变量输出
exec 则只能执行动态 sql 和 存储过程(执行过程不需要加小括号,执行动态 sql 则必须加小括号)
----------------------------------------------------------------------------------

declare @count int
declare @sql1 nvarchar(100)
declare @sql2 nvarchar(100)
declare @str nvarchar(10)


--1 执行需要为变量赋值的动态 sql
set @str='1'
set @sql1='select @count1=COUNT(*) from Base_Product where 1=@str1'
print @sql1-- 调试信息输出
--注意:执行 sp_executesql 存储过程不需要加 小括号 ,加了就报错! 
EXECUTE sp_executesql
 @sql1,
 N'@count1 int output,@str1 varchar(10)',
 @count1 = @count output,@str1=@str
select @count --查看统计数


--2 执行普通动态 sql
set @sql2='select top 10 * from Base_Product'
print @sql2-- 调试信息输出
EXECUTE (@sql2) --注意:这里如果加小括号为执行 sql 语句,不加小括号默认为执行'存储过程'


/*
对 sp_executesql 存储过程做个说明
第一个参数:
很明显是要执行的拼接后的 sql 语句了,其中@count1、@str1为占位符,
为了测试所以选择了一个int和一个nvarchar 类型做测试


第二个参数:
这个参数是对第一个参数中的‘占位符’进行说明和定义用的
需要动态执行的脚本: 'select @count1=COUNT(*) from Base_Product where 1=@str1'
  对占位符进行的说明: N'@count1 int output,@str1 varchar(10)'
  如果动态脚本中有多个占位符时,需要在说明字符串中使用‘逗号’隔开,
  如果需要在执行‘动态sql’后得到其中参数的值,需要为其标注为 output,即 @count1 int output 


第三个参数到第N个参数:
  这个参数是对‘占位符’中变量与实际变量绑定用的,
  如果在第二个参数中标记‘站位符’为 output ,这里也需要进行一下标记
  即:@count1 = @count output
  (注意‘占位符’中的变量名不需要加单引号)
  
sp_executesql 语法详见: 
http://msdn.microsoft.com/zh-cn/library/ms188001.aspx
*/


/*转载保留:http://write.blog.csdn.net/postedit/7648579
原创粉丝点击