Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
手动重新编译存储过程SQL Server_Sql_Sql Server_Tsql_Recompile - Fatal编程技术网

手动重新编译存储过程SQL Server

手动重新编译存储过程SQL Server,sql,sql-server,tsql,recompile,Sql,Sql Server,Tsql,Recompile,如何在SQL Server中手动重新编译存储过程?就像是一个拖放和创建 我知道可以通过create语句中的一个选项来完成,每次执行时都会重新编译,执行sp_RECOMPILE@procedureName,它只会在下次执行时重新编译,但是如果没有这两种方法,我怎么能手动重新编译呢,一种方法是通过查询找到计划句柄 Select st.Plan_handle from sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(p

如何在SQL Server中手动重新编译存储过程?就像是一个
拖放
创建


我知道可以通过create语句中的一个选项来完成,每次执行时都会重新编译,执行
sp_RECOMPILE@procedureName
,它只会在下次执行时重新编译,但是如果没有这两种方法,我怎么能手动重新编译呢,一种方法是通过查询找到计划句柄

Select st.Plan_handle 
from 
sys.dm_exec_cached_plans 
    CROSS APPLY 
sys.dm_exec_sql_text(plan_handle) st 
WHERE text like '% your proc name %'
然后DBCC FREEPROCCACHE(计划句柄)


此方法实际上与sp_重新编译相同。

存储过程在“第一次”执行时编译。“第一”的意思是,他们没有改变计划。您所能做的就是使缓存无效。在SQL Server中,除了调用它之外,没有其他方法强制编译

(顺便说一句,这不像甲骨文,你可能是从甲骨文那里得到这个想法的)


在我们的应用程序中,我们维护一个名为“run_sample_statements.sql”的脚本。这包含许多有代表性的查询和过程调用,以导致编译和缓存。我们在维护和索引重建之后使用它来测试/预编译系统,然后再向用户发布。

DROP/CREATE还会在下次执行时编译程序,所以我认为sp_重新编译是您想要的。