sp_executesql 使用

Posted zslm___

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sp_executesql 使用相关的知识,希望对你有一定的参考价值。

sp_executesql 比 之前的exec @sql 区别在可以实现参数的传入传出

declare @sql nvarchar(2000) 
declare @pid varchar(20) 
set @pid=‘001‘ 
set @sql=‘select count(1) from Sale (nolock) where pid=‘ + @pid 
exec @sql 

在传统的 exec 是无法将Count(*)传出到外面 的

 

 

但是如果用 sp_executesql 则很简单

declare @sql nvarchar(2000) 

declare @saleCount int 
declare @pid varchar(20) 
set @pid=‘001‘ 
set @sql=‘select @count=count(1) from Sale  (nolock) where [email protected]‘ 
exec sp_executesql @sql, N‘@count int out,@pid varchar(20)‘, @saleCount out ,@id 
print @saleCount 

 

 

 

set statistics time on
Go

declare @sql nvarchar(2000)

declare @recordCount int
declare @OpType int
set @OpType= 300305
set @sql=‘select @Count=count(1) from UserAmountLog (nolock) where [email protected]
exec sp_executesql @sql, N‘@Count int out,@type int‘, @recordCount out ,@OpType
print @recordCount

 

用exec,由于每次传入的参数值不一样,所以每次生成的@sql就不一样,这样每执行一次Sql 就必须重新将要执行的动态Sql重新编译一次 
但是sp_executesql则不一样,由于将数值参数化,要执行的动态Sql永远不会变化,只是传入的参数的值在变化,那每次执行的时候就秒用重新编译,速度自然快多了 ! 

以上是关于sp_executesql 使用的主要内容,如果未能解决你的问题,请参考以下文章

sp_executesql介绍和使用

使用 sp_executesql 的非最佳执行计划

sp_executesql介绍和使用

SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别

sp_executesql 可動態傳入傳出參數

实体框架可以在不访问 sp_executesql 的情况下执行存储过程吗?