2011-11-02 11 views
11

यदि BEGIN के बाद सही है तो मेरे पास SET TRANSACTION ISOLATION LEVEL ... कथन है, यदि मैं BEGIN TRANSACTION का उपयोग करता हूं या नहीं, तो संग्रहीत प्रक्रिया के पूरे दायरे के लिए दिए गए लेनदेन स्तर को लागू किया जाएगा? अर्थात् यदि मेरे पास सरल SELECT कथन हैं, जो परिभाषा द्वारा परमाणु/लेनदेन किए गए हैं, तो उनके लिए डिफ़ॉल्ट लेनदेन स्तर दिया गया है?SQL सर्वर: संपूर्ण संग्रहीत प्रक्रिया के लिए डिफ़ॉल्ट अलगाव स्तर कैसे सेट करें?

BEGIN 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED 
-- will a transaction level for a atomic transaction created by SQL Server for this statement be READ COMMITTED 
SELECT * FROM T 
END 

उत्तर

11

पहले, एसक्यूएल सर्वर में डिफ़ॉल्ट अलगाव स्तर प्रतिबद्ध पढ़ा जाता है, ताकि बयान वास्तव में कुछ भी नहीं है, जब तक आप डिफ़ॉल्ट अलगाव स्तर बदल दिया है।

लेकिन, सामान्य रूप में, हाँ, SET लेनदेन अलगाव स्तर पूरी प्रक्रिया के लिए अलगाव स्तर (कनेक्शन की अवधि, वास्तव में) बदल जाएगा

ध्यान रखें कि सभी SQL कथन जिसका अर्थ है कि अंतर्निहित लेनदेन कर रहे हैं यदि, उदाहरण के लिए, एक अद्यतन 99% विफल रहता है, तो यह स्वचालित रूप से रोलबैक होगा; नहीं BEGIN TRAN/COMMIT आवश्यक है।

अपने प्रश्न का उत्तर देने के लिए, हाँ, आपके SELECT कथन आपके द्वारा निर्धारित अलगाव स्तर (या डिफ़ॉल्ट अगर आप एक सेट नहीं करते हैं) का वारिस करेंगे, जब तक कि आप WITH NOLOCK जैसे क्वेरी संकेत के साथ व्यवहार को ओवरराइड नहीं करते हैं जो व्यक्तिगत क्वेरी व्यवहार करेगा जैसा कि आपने SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

+3

[यह यहां दिखाए गए कनेक्शन की अवधि के लिए नहीं बदलता है] (http://stackoverflow.com/questions/7507714/sql-server-2005-transaction-level-and-stored -प्रोकेशंस/7507829 # 7507829) –

+0

@ मैजिकिक: धन्यवाद! मैं इसे उत्तर के रूप में स्वीकार कर रहा हूं लेकिन यह बेहतर होगा यदि आप मुझे एमएस दस्तावेज में इंगित कर सकें। – Schultz9999

+1

यदि यह मदद करता है: 'सेट ट्रांज़ेक्शन इशोलेशन लेवल' - http://msdn.microsoft.com/en-us/library/ms173763.aspx लागू लेनदेन: - http://msdn.microsoft.com/en-us/library /ms188317.aspx –

संबंधित मुद्दे