2009-04-06 3 views
17

Как я могу отбросить запрос UPDATE в SQL Server 2005?Как я могу отменить запрос UPDATE в SQL Server 2005?

Мне нужно сделать это в SQL, а не через код.

+1

что вы имеете в виду с обновлением? можете ли вы получить немного дальше по этому вопросу? –

+1

Я обновил таблицу, которая была моей ужасной ошибкой ... вместо того, чтобы обновить одну строку ... с моей небрежностью обновили все строки ... как мне откат этого .... пожалуйста, помогите ..... – Guddu

+1

Вам нужно Журнал ApexSQL. –

ответ

5

Вы можете отменить заявления, которые вы выполнили в рамках транзакции. Вместо совершения транзакции откат транзакции.

Если вы обновили что-то и хотите откатить эти обновления, и вы еще не сделали этого внутри (пока еще не совершил) сделки, то я думаю, что, хотя удача ...

(ремонт вручную или восстановление резервных копий)

30
begin transaction 

// execute SQL code here 

rollback transaction 

Если вы уже выполнили запрос и хотите, чтобы свернуть его назад, к сожалению, ваш единственный реальный вариант для восстановления резервной копии базы данных. Если вы используете полное резервное копирование, вы должны иметь возможность восстановить базу данных в определенный момент времени.

+1

Что вы подразумеваете под полными резервными копиями, должен ли я делать резервную копию базы данных ежедневно, я новичок в этом? – stom

1

После того как обновление установлено, вы не можете отменить только одно обновление. Лучше всего вернуться к предыдущей резервной копии базы данных.

1

Из информации, которую вы указали, ваша лучшая вероятность восстановления - это резервное копирование базы данных. Я не думаю, что вы сможете отбросить все те изменения, которые вы проталкивали, поскольку в то время вы, по-видимому, не использовали транзакции.

28

Вам этот инструмент нужен, и вы можете найти его и отменить.

ApexSQL Log

+1

«Ooops - желаю, чтобы вы могли откат, который обновляет оператор без предложения where !? Журнал ApexSQL имеет возможность ROLLBACK-транзакций для баз данных SQL Server». Отличная линия! –

+2

это платный кажется отличным, но это стоило 2000 $ –

0

Как уже говорилось нет ничего, что вы можете сделать, кроме как восстановить из резервной копии. По крайней мере, теперь вы научитесь всегда переносить утверждения в транзакции, чтобы увидеть, что происходит до того, как вы решите совершить. Кроме того, если у вас нет резервной копии вашей базы данных, это также научит вас делать регулярные резервные копии вашей базы данных.

Хотя мы не очень помогали вашей проблеме imediate ... надеюсь, эти ответы гарантируют, что вы не столкнетесь с этой проблемой снова в будущем.

-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 

код ....

'Копирование данных из Excel'

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 
Смежные вопросы