У меня есть следующий запрос:Отката в SQL
use valid
begin transaction t1
go
delete from dbo.do
rollback transaction t1
go
С откатом Я хочу, чтобы отменить операцию удаления. Не получайте никаких результатов, что не так?
У меня есть следующий запрос:Отката в SQL
use valid
begin transaction t1
go
delete from dbo.do
rollback transaction t1
go
С откатом Я хочу, чтобы отменить операцию удаления. Не получайте никаких результатов, что не так?
Попробуйте без «идти» после начала транзакции.
Это пакетный разделитель, используемый клиентскими инструментами (например, SSMS) для разбивки всего скрипта на партии. Я не думаю, что это имеет отношение к транзакции. –
Ваш запрос выглядит нормально в первом взгляде, и он должен работать без каких-либо проблем. Я пробовал подобный пример код, как показано ниже, и она отлично работает:
use [replocal]
begin transaction t1
go
delete from dbo.ftpfilelog
rollback transaction t1
go
select * from dbo.ftpfilelog
Но если у Вас есть какие-либо другие вопросы после ВЕЯТ и бросил ошибку и никогда не достигал ROLLBACK Постулатов в том случае, если ваши ряды ушли ,
Вам лучше использовать TRY..CATCH и поместить свой ROLLBACK в CATCH. Он будет всегда откатываться, если есть какая-либо ошибка.
вы можете использовать безопасный и простой код для запуска 100% (запустить все строки запроса) или не бежать от них какой-либо
DECLARE @rowcount int set @rowcount = 0 ;
BEGIN TRANSACTION [Tran1]
BEGIN TRY
<Query 1> ; set @rowcount = (@rowcount + @@ROWCOUNT);
<Query 2> ; set @rowcount = (@rowcount + @@ROWCOUNT);
...
IF @rowcount = <count of lines>
COMMIT TRANSACTION[Tran1]
ELSE
ROLLBACK TRANSACTION[Tran1]
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION[Tran1]
END CATCH
, например, этот код запуска 2 вставки в строке запроса, но и выполнять все его или не запускать ничего и откатить
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
Определение «результатов» , если вы не используете предложение OUTPUT, вы не получаете результат от DELETE. –
@ пользователь2645263 какой выход вы ожидаете ?? – Dhaval