預存程序正在跑時,修改預存程序定義

看起來預存程序會繼續依照執行計畫(舊的定義)執行,當下可以修改執行中的預存程序,不會被鎖住。在下一次呼叫該預存程序時,會以新的定義重建執行計畫

use tempdb

create table t(c1 int)
go

create proc sp1
as
truncate table t
waitfor delay ’00:00:20′
insert t values(1)
go

exec sp1
go
–換另外一條連接執行修改 SP 定義
–會立刻執行完畢
/*
alter proc sp1
as
truncate table t
waitfor delay ’00:00:10′
insert t values(2)
*/
–驗證這條連接還是照正在用的"執行計畫"執行完畢
select * from t

–再呼叫一次該預存程序,會得到修改後的結果

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: