Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

begin transaction

// execute SQL code here

rollback transaction

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

Ответ 2

Вам нужен этот инструмент, и вы можете найти транзакцию и отменить ее.

Журнал ApexSQL

Ответ 3

Вы можете использовать неявные транзакции для этого

SET IMPLICIT_TRANSACTIONS ON

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

ROLLBACK

Как вы просите - вы можете установить эту настройку (SET IMPLICIT_TRANSACTIONS ON) из хранимой процедуры, установив эту хранимую процедуру как процедуру запуска.

Но команда SET IMPLICIT TRANSACTION ON является специфичной для соединения. Таким образом, любое соединение, отличное от того, которое запускает хранимую процедуру запуска, не будет использовать настройку, которую вы установили.

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

Простота:

код заголовка...

Set objMyConn = New ADODB.Connection

Set objMyCmd = New ADODB.Command Set

objMyRecordset = New ADODB.Recordset

On Error GoTo ERRORHAND 

Рабочий код...

objMyConn.ConnectionString = ConnStr

objMyConn.Open 

code....

'Копировать данные из 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

...

Ответ 8

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

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

Ответ 9

в этом примере мы запускаем 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

Ответ 10

Try

ROLLBACK WORK;

Он обычно работает