2012-08-06 22 views
27

@@rowcount का दायरा क्या है? MSDN अपने दायरे का उल्लेख नहीं करता है।@@ rowcount का दायरा?

अंतिम विवरण से प्रभावित पंक्तियों की संख्या देता है।

ठीक है।

मेरे एसपी में - मैं एक तालिका में डाल रहा हूं, जिसमें insert trigger है जो प्रविष्टि करता है जब तालिका में कोई नया मान डाला जाता है।

प्रश्न:

जो गुंजाइश के लिए @@rowcount संदर्भित करेंगे? (ट्रिगर या एसपी)?

उत्तर

20

अनुमोदित, आलेख SQL Server 2000 के लिए है, लेकिन कोई उम्मीद करेगा कि संस्करणों के बीच दायरा नहीं बदलेगा। लेख How triggers affect ROWCOUNT and IDENTITY in SQL Server 2000 के अनुसार, @@ROWCOUNT ट्रिगर्स से प्रभावित नहीं होगा।

विशेष रूप से:

यह एसक्यूएल सर्वर 2000 में @@ ROWCOUNT उपयोग करने के लिए जब भी वहाँ आधार मेज पर एक ट्रिगर है सुरक्षित है। ट्रिगर आपके परिणाम नहीं छोड़ेगा; आप जो उम्मीद करेंगे वह आपको मिलेगा। @@ ROWCOUNT सही होने पर भी सही काम करता है जब NOCOUNT सेट होता है।

तो अगर आप तीन पंक्तियों, और ट्रिगर अपडेट पांच पंक्तियों कहीं और अपडेट करेंगे तो आपको 3.

के @@ROWCOUNT इसके अलावा, GBN के जवाब से SQL Server - is using @@ROWCOUNT safe in multithreaded applications? में मिल जाएगा:

@@ ROWCOUNT दोनों गुंजाइश और कनेक्शन सुरक्षित है।

वास्तव में, यह उस कनेक्शन और दायरे के लिए केवल अंतिम कथन पंक्ति गणना पढ़ता है।

+0

इस स्पष्टीकरण के लिए धन्यवाद! –

11

हर सम्मिलित/अपडेट/select/सेट/बयान को नष्ट रीसेट करता पंक्तियों निष्पादित बयान से प्रभावित करने के लिए @@rowcount

begin 
declare @myrowcount int, 
    @myrowcount2 int 
insert stmt 
SET @[email protected]@rowcount 
if @myrowcount>0 
begin 
insert stmt 
SET @myrowcount2 [email protected]@rowcount 
if @myrowcount2 >0 
do smthg 
end 
end 

या यहां तक ​​कि एक अगर बयान को प्रभावित करता है इस

SELECT * FROM master.sys.objects -- 50 rows 
    IF (1=1) 
     SELECT @@ROWCOUNT AS RowsAffected -- 0, because the IF did not affect any rows 

कोशिश यह .... इसलिए इसका दायरा आखिरी बयान पढ़ा गया है।