本文主要是介绍exec与sp_executesql,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
总是嫌sp_executesql麻烦,执行动态语句的时候就直接用exec @sql了,反思
1.清空过程缓存
DBCC FREEPROCCACHE
2,执行以下语句,应该只有一句sql
select sql
FROM MASTER..SYSCACHEOBJECTS
where dbid=db_id('dbname')
3.执行以下语句declare @NAME nvarchar(30),@sql nvarchar(100)
set @name ='abc'
SET @SQL = 'Select * FROM account Where playerid = '''+@NAME +''''
EXEC (@SQL)
set @name = 'def'
SET @SQL = 'Select * FROM account Where playerid = '''+@NAME +''''
EXEC (@SQL)
4 再执行2,可以看到缓存了两条@sql的语句(参数不同)
5,执行1,清空缓存,执行以下语句
declare @NAME nvarchar(30),@sql nvarchar(100)
set @name ='abc'
SET @SQL = 'Select * FROM account Where playerid = @NAME'
EXEC sp_executesql @SQL,N'@name varchar(50)',@name
set @name ='def'
SET @SQL = 'Select * FROM account Where playerid = @NAME'
EXEC sp_executesql @SQL,N'@name varchar(50)',@name
6.可以看到执行的两条@sql 缓存的是一条,也就是说数据库不用从新编译第二条执行计划
7.一定注意sp_executesql 后面的数据类型声明一定要和表里的类型一样,不一样的话可能不会引起编译错误,但是可能引起不能引用索引,比如字段类型是char(1),但是在sp_executesql中声明的是int
这篇关于exec与sp_executesql的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!