2017-02-23 38 views
0

我有一個「SQL Server如何在內部工作」 - 問題。何時可以看到更新的效果,在存儲過程調用期間插入和刪除?

如果我創建4個存儲過程:

SP1 - FetchNamesFromSourceTable (takes 10 minutes to run) 
SP2 - UpdateNamesWithAttendanceInfo (takes 5 minutes to run) 
SP3 - AddAddressToNames (takes 8 minutes to run) 

SP4 - RunUpdate which will run SP1, 2 and 3 in sequence. 

現在,如果我們假設SP獲取從表OriginalNames到表NamesWithAttendanceAndAddresses名稱(這只是一個例子),我們假設NamesWithAttendanceAndAddresses是空的第一個當我運行這個。

現在,如果我調用SP4,然後在16分鐘後從NamesWithAttendanceAndAddresses中選擇*,我是否會看到SP1和SP2的結果,或者我將無法在NamesWithAttendanceAndAddresses中看到任何結果,直到SP4完全運行它的過程??

+0

這是關於MS SQL服務器,所以這是Transact SQL。 –

+0

這取決於可能的因素,如鎖定,隔離級別 – TheGameiswar

回答

2

這一切都取決於事務隔離級別。此外,它與程序本身無關,而與交易無關。

在默認的事務隔離級別(READ COMMITTED在SQL Server)及以上者,你的SP4將能夠看到的只有更新事務後SP1中所做的更改在SP1中提交。 SP1本身是否返回是無關緊要的。

使用READ UNCOMMITTED隔離級別(不推薦)一旦數據頁在內存中更新,SP4將能夠看到更改的數據。

+0

外部SP4如何?如果我從SP4內部檢查,我可以看到SP1的結果,但是如果我啓動SP4並從外部檢查,它仍然是一樣的嗎?我認爲,是的,但我不是100%肯定的。 –

+1

這裏的要點是,SP4,SP123或其他任何東西都無關緊要。如果修改數據的事務提交了更改,則其他人都會看到它;如果尚未提交,只有在READ UNCOMMITTED隔離級別下運行的進程纔會看到更改後的數據。 (但它不是事務一致的,也可以回滾,所以...) – dean

相關問題