`
java-mans
  • 浏览: 11416042 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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
*/


/*转载保留:www.iqingcao.com*/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics