手动 重编译存储过程、SQL语句、函数、触发器、视图
2011-11-25 11:31
786 查看
SQL Server 中,强制重新编译存储过程的方式有三种: sp_recompile 系统存储过程强制在下次执行存储过程时对其重新编译。具体方法是:从过程缓存中删除现有计划,强制在下次运行该过程时创建新计划。 创建存储过程时在其定义中指定 WITH RECOMPILE 选项,指明 SQL Server 将不为该存储过程缓存计划,在每次执行该存储过程时对其重新编译。当存储过程的参数值在各次执行间都有较大差异,导致每次均需创建不同的执行计划时,可使用 WITH RECOMPILE 选项。此选项并不常用,因为每次执行存储过程时都必须对其重新编译,这样会导致存储过程的执行变慢。 如果只想在要重新编译的存储过程而不是整个存储过程中执行单个查询,请在要重新编译的每个查询中指定 RECOMPILE 查询提示。此行为类似于本节前面中所述的 SQL Server 语句级重新编译行为,但除了使用存储过程的当前参数值外,RECOMPILE 查询提示还在编译语句时使用存储过程中本地变量的值。请仅在属于存储过程的查询子集中使用非典型值或临时值时使用此选项。有关详细信息,请参阅查询提示 (Transact-SQL)。 可以通过指定 WITH RECOMPILE 选项,强制在执行存储过程时对其重新编译。仅当所提供的参数是非典型参数,或自创建该存储过程后数据发生显著变化时,才应使用此选项。 如果删除或重命名了存储过程所引用的对象,那么在执行该存储过程时会返回错误。但如果存储过程中引用的对象被同名的对象所替换,则无须重新创建即可执行该存储过程。 sp_recompile 只在当前数据库中寻找对象。 存储过程和触发器所用的查询只在编译时进行优化。对数据库进行了索引或其他会影响数据库统计的更改后,已编译的存储过程和触发器可能会失去效率。通过对作用于表上的存储过程和触发器进行重新编译,可以重新优化查询。 案例: sp_recompile procedurename|tablename|functionname |triggername |view 说明 :当前数据库中存储过程、触发器、表或视图的限定或未限定名称。object 的数据类型为 nvarchar(776),没有默认值。如果 object 是存储过程或触发器的名称,则该存储过程或触发器将在下次运行时重新编译。如果 object 是表或视图的名称,则所有引用该表或视图的存储过程或触发器都将在下次运行时重新编译。 强制当前存储过程执行重编译计划 exec procedurename with recompile 强制SQL语句每次执行时重编译 select * from tablename|viewname recompile
相关文章推荐
- 从 syscomments 取系统存储过程、用户存储过程、视图、函数、触发器等对象的sql定义语句
- 从已有数据库生成脚本来获得生成数据表、视图、函数、存储过程以及触发器的SQL语句
- SQL Server 第四堂课,创建存储过程。存储过程是一组编译在单个执行计划中的transact-SQL语句。存储过程相当于C#函数,可以允许模块化程序设计,允许更快执行如果某操作需要大量transct-SQL代码或需要重复执行,将在创建存储过程中对其进行分析和优化。
- 用SQL语句查找包含有某个关键字的存储过程、触发器、函数等(仅适用MS SQL SERVER)
- syscomments 存储系统存储过程、用户存储过程、视图、函数、触发器等对象的sql定义语句
- 用SQL语句查找包含有某个关键字的存储过程、触发器、函数等(仅适用MS SQL SERVER)
- 用SQL语句查找包含有某个关键字的存储过程、触发器、函数等等
- SQL语句查询存储过程 视图 所有表 触发器
- SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则.sql
- 用SQL语句查找包含有某个关键字的存储过程、触发器、函数等等
- mysql查看所有存储过程,函数,视图,触发器,表
- SQl 查询表、存储过程、函数、视图等所在的存储过程
- MYSQL基础(视图、索引、存储过程与函数、流程控制语句)
- mysql查看所有存储过程,函数,视图,触发器,表
- mysql,sqlserver,oracle查看所有存储过程,函数,视图,触发器,表
- 查看SQL SERVER 加密存储过程,函数,触发器,视图
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- 用sql语句导出oracle中的存储过程和函数
- Oracle 中重新编译无效的存储过程, 或函数、触发器等对象(转)