2012-11-28 65 views

回答

0

SQL是一種腳本語言,這意味着你寫的代碼不編譯。而是存儲在服務器上以備後用。

當您編輯存儲過程,你可以執行ALTER腳本,或則DROP創建腳本。這會將Web數據管理員(或SSMS)窗口中的文本發送到服務器,併發出一條命令,通知服務器將此新查詢作爲過程存儲以供將來使用。

因此,簡而言之,是的,如果你執行ALTER腳本。

+1

事實上,SQL Server存儲過程「編譯」在他們的第一次運行。 [SQL服務器 - 存儲過程都編上首次運行(http://blog.sqlauthority.com/2009/11/08/sql-server-stored-procedure-are-compiled-on-first-run-sp-taking - 更長時間運行的第一次/)這是使用Sprocs的(邊際)好處之一。不過,重複使用的文本查詢可以獲得許多相同的好處。然而,你注意到使用'ALTER'(或'DROP',然後'CREATE')確實會導致重新編譯。否則,新的sproc將不會生效。 –

+0

@AndrewBarber優秀的一點。我甚至都沒有想過所有的SP重新編譯和調整爵士樂。想知道如果原來的問題是關於編譯或不... –

1

MSSQL Server會保持query plans緩存,但這是不一樣的編譯代碼。

的SQL Server管理這個緩存,如果緩存一個計劃,不是最優的可以是一些痛苦的根源。雖然這發生在我身上小於5倍15年(這似乎是與特定的服務器有問題),其最好讓SQL服務器處理這個問題,並沒有觸及它

您可以強制的SQLServer通過提供WITH RECOMPILE選項重新編譯。同樣的原則同樣適用,除非你有一個實質性的理由,不要

+0

@Andrew理髮 - 我大膽點 – StingyJack

+0

燁;但是我發現有時人們在提出'WITH RECOMPILE'時會斷開連接,認爲在Sproc的定義中需要使它從緩存中清除該緩存。我沒有說出我說得對的,而且*似乎表明你沒有說出你所說的話。刪除! –