MSSQL sp_executesql exec 用法简介


一、sp_executesql exec 简介

sp_executesql:是MSSQL2005版本中引入的新的”系统存储过程”,
 需要采用exec来调用此存储过程,输入相关的sql 定义参数 输入 输出,放入参数值,来达到动态执行SQL的目的

exec:是MSSSL中主要用来动态执行命令(包括存储过程(用户自定义及系统存储过程)、sql )
 

二、sp_executesql exec 区别 优缺点

2.1 本身属性不同
sp_executesql 为存储过程 exec 为MSSQL中的一个系统命令
2.2 可接收参数不同
sp_executesql 可以有很多参数 
exec 只能执行一条命令


2.3 sp_executesql 优点
由于sp_executesql可以接受参数化的sql,当sql不变时,采用此方式可以减少sql编译次数,减少执行计划的估算时间,使系统更高效
由于sp_executesql可以接受参数化的sql,可以有效地避免sql注入漏洞
由于sp_executesql可以接受参数化的sql,并且可以定义参数的属性(输入 输出),使此命令可输出变量
2.4 exec 优点
灵活,可随心所欲


三、sp_executesql exec 举例说明

 
/*
1  建表  插入数据
*/

create table A(keyId int,info varchar(60))
insert into A values
(1,'a'),(2,'b'),(3,'C'),
(4,'d'),(5,'e'),(6,'f'),
(7,'g'),(8,'h'),(9,'y') 



/*
2  sp_executesql exec 用法举例说明
*/


/*
sp_executesql 输出参数用法
*/
declare @sql nvarchar(60) ---sp_executesql 的参数必须为  ntext/nchar/nvarchar 
declare @bOutPut varchar(20) ---输出接收参数定义
set @sql ='select   * from A where keyId=@a    select @b=info from A where keyId=@a'

exec sp_executesql @sql,N'@a int ,@b varchar(20) output',@a=2,@b=@bOutPut output 

select @bOutPut  
 

/*
动态执行sql用法
*/

 
exec sp_executesql N'select   * from A where keyId=@a',N'@a int ',@a=2


 
/*
exec 用法
*/

declare @sql varchar(60)

set @sql ='select  top 10   * from A'  

exec (@sql) ---注意exec执行时 ,@sql变量需要使用小括号括起

/*
3 删除和清理数据表
*/

truncate table A
drop table A