2009-04-06 11 views
17

मैं एसक्यूएल सर्वर 2005 में एक अद्यतन क्वेरी कैसे रोलबैक कर सकता हूं?मैं एसक्यूएल सर्वर 2005 में एक अद्यतन क्वेरी कैसे रोलबैक कर सकता हूं?

मुझे कोड में नहीं, एसक्यूएल में ऐसा करने की ज़रूरत है।

+1

क्या आप अद्यतन के साथ मतलब है? क्या आप इस सवाल पर थोड़ा और आगे आ सकते हैं? –

+1

मैंने एक टेबल अपडेट किया है जो मेरी भयानक गलती थी ..in एक पंक्ति को अपडेट करने के बजाय .. मेरी लापरवाही के साथ सभी पंक्तियों को अपडेट किया गया है ... मैं इसे कैसे वापस रोल करूं .... कृपया मदद करें ..... – Guddu

+1

आपको चाहिए ApexSQL लॉग। –

उत्तर

5

आप लेनदेन के भीतर निष्पादित किए गए बयान को रोलबैक कर सकते हैं। लेनदेन को कम करने के बजाय लेनदेन को रोलबैक करें।

आप कुछ अपडेट किया है किया है और उन अपडेट रोलबैक करना चाहते हैं, और आप इस एक (नहीं अभी तक प्रतिबद्ध) लेन-देन के अंदर नहीं किया है, तो मुझे लगता है कि हालांकि भाग्य ...

(मैन्युअल की मरम्मत यह है , या, बैकअप बहाल)

30
begin transaction 

// execute SQL code here 

rollback transaction 

आप पहले से ही क्वेरी निष्पादित और इसे वापस रोल करने चाहते हैं, तो दुर्भाग्य से अपने ही असली विकल्प एक डेटाबेस बैकअप बहाल करने के लिए है। यदि आप पूर्ण बैकअप का उपयोग कर रहे हैं, तो आप समय पर किसी विशिष्ट बिंदु पर डेटाबेस को पुनर्स्थापित करने में सक्षम होना चाहिए।

+1

पूर्ण बैकअप द्वारा आपका क्या मतलब है, क्या मुझे दैनिक बैकअप डेटाबेस चाहिए, मैं इसके लिए नया हूं? – stom

1

एक बार अपडेट होने के बाद आप केवल एक ही अपडेट रोलबैक नहीं कर सकते हैं। आपकी सबसे अच्छी शर्त डेटाबेस के पिछले बैकअप पर वापस रोल करना है।

1

आपके द्वारा निर्दिष्ट जानकारी से, पुनर्प्राप्ति का आपका सबसे अच्छा मौका डेटाबेस बैकअप के माध्यम से होता है। मुझे नहीं लगता कि आप उस परिवर्तन में से किसी भी रोलबैक को रोलबैक करने में सक्षम होने जा रहे हैं क्योंकि आप स्पष्ट रूप से उस समय लेनदेन का उपयोग नहीं कर रहे थे।

28

आपको इस उपकरण की आवश्यकता है और आप लेनदेन पा सकते हैं और इसे उलट सकते हैं।

ApexSQL Log

+1

"ओउप्स - इच्छा है कि आप बिना किसी खंड के अपडेट स्टेटमेंट को रोलबैक कर सकें !? ApexSQL लॉग में SQL सर्वर डेटाबेस के लिए रोलबैक लेनदेन की क्षमता है।" महान रेखा! –

+2

कि टोल बहुत अच्छा लगता है लेकिन इसकी कीमत 2000 डॉलर है –

0

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

हालांकि हम आपकी इमेडिएट समस्या के लिए बहुत मदद नहीं कर रहे हैं ... उम्मीद है कि ये उत्तर सुनिश्चित करेंगे कि आप भविष्य में इस समस्या में फिर से भाग न लें।

-3

प्रयास करें

ROLLBACK WORK; 

यह आमतौर पर काम करता है

1

करने के लिए सरल:

हैडर कोड ...

Set objMyConn = New ADODB.Connection 

Set objMyCmd = New ADODB.Command Set 

objMyRecordset = New ADODB.Recordset 

On Error GoTo ERRORHAND 

कार्य कोड ...

objMyConn.ConnectionString = ConnStr 

objMyConn.Open 

कोड ....

'प्रतिलिपि डेटा से एक्सेल'

objMyConn.BeginTrans <-- define transactions to possible be rolled back 

For NewRows = 2 To Rows 

objMyRecordset.AddNew 

For NewColumns = 0 To Columns - 1 

objMyRecordset.Fields(NewColumns).Value = ActiveSheet.Cells(NewRows, NewColumns + 1) 

Next NewColumns objMyRecordset.Update Next NewRows 

objMyConn.CommitTrans <- if success, commit them to DB 

objMyConn.Close 

ERRORHAND:

Success = False 

objMyConn.RollbackTrans <-- here we roll back if error encountered somewhere 

LogMessage = "ERROR writing database: " & Err.Description 

...

6

आप इस

SET IMPLICIT_TRANSACTIONS ON 

update Staff set staff_Name='jas' where staff_id=7 

ROLLBACK 

के लिए अंतर्निहित लेनदेन का उपयोग आप request-- के रूप में आप शुरू प्रक्रिया के रूप में संग्रहीत प्रक्रिया की स्थापना करके एक संग्रहीत प्रक्रिया से इस सेटिंग (SET IMPLICIT_TRANSACTIONS ON) सेट कर सकते हैं कर सकते हैं।

लेकिन SET IMPLICIT TRANSACTION ON आदेश कनेक्शन विशिष्ट है। इसलिए स्टार्ट अप संग्रहीत प्रक्रिया चलाने वाले किसी भी कनेक्शन के अलावा आपके द्वारा सेट की गई सेटिंग से लाभ नहीं होगा।

0
इस उदाहरण में

हम क्वेरी में डालने 2 लाइन चलाने के लिए और अगर उन सभी को सच इसे चलाने लेकिन यदि नहीं नहीं चल कुछ भी और ROLLBACK

DECLARE @rowcount int set @rowcount = 0 ; 
BEGIN TRANSACTION [Tran1] 
BEGIN TRY 
insert into [database].[dbo].[tbl1] (fld1) values('1') ; 
    set @rowcount = (@rowcount + @@ROWCOUNT); 
insert into [database].[dbo].[tbl2] (fld1) values('2') ; 
    set @rowcount = (@rowcount + @@ROWCOUNT); 

IF @rowcount = 2 
    COMMIT TRANSACTION[Tran1] 
ELSE 
    ROLLBACK TRANSACTION[Tran1] 
END TRY 
    BEGIN CATCH 
    ROLLBACK TRANSACTION[Tran1] 
END CATCH 
संबंधित मुद्दे