Я использую ниже SQL для удаления записей и вставки в таблицу Customers внутри транзакции. Если в операторах вставки есть ошибка, я вижу сообщение об ошибке, и когда я пытаюсь выполнить select * from customers
, он не отображает набор результатов. И когда я закрываю окно SSMS, он показывает There are uncommitted transactions. Do you wish to commit these transactions before closing the window?
SQL Transaction не работает
После того, как я нажму OK, результаты будут отображаться из таблицы. Итак, существует ли какой-либо механизм блокировки при использовании транзакции.
USE CMSDB;
BEGIN TRY
BEGIN TRAN t1;
DELETE FROM Customers
print @@trancount -->prints 3 since there are three records
INSERT INTO CUSTOMERS
INSERT INTO CUSTOMERd --> error here
INSERT INTO CUSTOMERS
COMMIT TRAN t1;
END TRY
BEGIN CATCH
print 'hi' --> not printing
select @@trancount --> not resulting anything
IF @@TRANCOUNT > 0
ROLLBACK TRAN t1;
-- Error Message
DECLARE @Err nvarchar(1000)
SET @Err = ERROR_MESSAGE()
RAISERROR (@Err,16,1)
END CATCH
GO
Сообщение
(3 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
Msg 208, Level 16, State 1, Line 8
Invalid object name 'dbo.Customerd'.
Похоже, что в какой-то момент (перед запуском этой последней партии) вы выделили только код с 'BEGIN TRANSACTION; '. Что означает 'SELECT @@ TRANCOUNT',' say? –
Кажется, что он почему-то не попадает в улов. Я попытался напечатать @@ trancount в уловке, но не смог. – Sunny
Просто 'SELECT @@ TRANCOUNT;' самостоятельно. Опять же, я думаю, что в какой-то момент вы выполнили хотя бы один «BEGIN TRANSACTION», не совершая его или не отбрасывая. –