標籤:style color io 使用 ar for strong sp 資料
最近遇到了一個問題就是 一個執行速度很快的預存程序,在代碼中調用的時候卻逾時了。
後來看到了兩篇文章:
其中一篇是這樣介紹的
今天同事用代碼調用預存程序時逾時,在SQL Server Management Studio裡運行卻很快就有結果,這和我上次遇到的情況一下,現在將解決方案記錄如下,謹為大家作一提醒。
解決方案就是: 把預存程序中多餘的空格刪掉。
瞠目吧結舌吧,不過這就是現實,現實是殘酷的,現實是無情的,哈哈
不一定是哪個空格就引起了逾時,試著看吧
上面的解決方案是將預存程序裡的空格去掉,但如果這樣,預存程序的格式就不是很友好後期維護也是很麻煩。
痛定思痛,於是乎有了下面的解決方案:即然是在資料庫裡執行成功,所以在程式裡構造一條如下的SQL執行 SqlParameter param = new SqlParameter("@project_id", project_id);
string selectCmd = string.Format("exec dbo.[***Get*ro*ctCo***] @project_id ", project_id);
DataSet ds = this.ExecuteQuery(CommandType.Text, selectCmd, param);將預存程序的執行作為一條SQL傳到資料庫中執行。
OK,糾結的你,趕緊試試吧。。。
而第二篇道出了問題的本質:
立即在查詢分析器上執行:
exec sp_recompile @objname=‘預存程序名稱‘
由於預存程序是先行編譯的, 在第一次執行的時候, 會產生執行計畫, 以後執行的時候, 會使用這個執行計畫(除非預存程序侯或者顯示指定重新編譯), 而不是每次執行時都去產生執行計畫。
當預存程序涉及的對象結構調整, 或者相關的資料產生了很大變化, 這可能導致原來的計劃不適合當前的現狀(執行計畫到期), 這種情況下應該重新編譯預存程序。
其實如果我們在預存程序中加上 with Recompile 也會達到同樣的效果
我也談談 代碼調用預存程序逾時,SQL Server Management Studio裡運行很快的問題