使存储过程、触发器和用户定义的函数在下次运行时重新编译。 具体方法是:从过程缓存中删除现有计划,强制在下次运行该过程或触发器时创建新计划。 在 SQL Server Profiler 集合中,记录事件 SP:CacheInsert 而不是事件 SP:Recompile。
语法
sp_recompile [ @objname = ] 'object'
参数
- [ @objname= ] 'object'
当前数据库中存储过程、触发器、表、视图或用户定义的函数的限定或非限定名称。 object 的数据类型为 nvarchar(776),无默认值。 如果存储过程、触发器或用户定义的函数的名称为 object ,则该存储过程、触发器或函数将在下次运行时重新编译。 如果表或视图的名称为 object,则引用表或视图的所有存储过程、触发器或用户定义的函数将在下次运行时重新编译。
返回代码值
0(成功)或非零数字(失败)
注释
sp_recompile 只在当前数据库中寻找对象。
存储过程、触发器和用户定义的函数所用的查询只在编译时进行优化。 因为对数据库进行了索引或其他影响统计的更改,所以已编译的存储过程、触发器和用户定义的函数可能会失去效率。 通过对作用于表的存储过程、触发器和用户定义的函数进行重新编译,可以重新优化查询。
![]() |
---|
SQL Server 会在有利时自动对存储过程、触发器和用户定义的函数进行重新编译。 |
权限
需要具有对指定对象的 ALTER 权限。
示例
以下示例造成了作用于 Customer 表的存储过程、触发器和用户定义的函数在下次运行时进行重新编译。
USE AdventureWorks2012;
GO
EXEC sp_recompile N'Sales.Customer';
GO