我也談談 代碼調用預存程序逾時,SQL Server Management Studio裡運行很快的問題

來源:互聯網
上載者:User

標籤: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裡運行很快的問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.