2014-01-09 3 views
0

У меня есть кусок кода SQL, который имеет следующий формат:SQL Server 2008 транзакции Lifecycle

SET IMPLICIT_TRANSACTIONS ON 

// Insert or Update Statement #1 
GO 

// Insert or Update Statement #2 
GO 

IF @@TRANCOUNT > 0 COMMIT TRAN 
SET IMPLICIT_TRANSACTIONS OFF 

Мой вопрос: утверждение 1 в той же транзакции, как заявление 2 (но они находятся в разных партиях) ? Я полагаю, что это основано на моем чтении в Google, но мне хотелось бы получить второе мнение.

Спасибо!

ответ

3

Это зависит. Если оба утверждения либо одно из следующих действий:

ALTER TABLE 
FETCH 
REVOKE 
BEGIN TRANSACTION 
GRANT 
SELECT 
CREATE 
INSERT 
TRUNCATE TABLE 
DELETE 
OPEN 
UPDATE 
DROP 

, то ответ да.

Поскольку, если соединение уже находится в открытой транзакции, приведенные выше операторы не запускают новую транзакцию.

Если, однако, заявление 2 равно BEGIN TRANSACTION, это приведет к открытию двух вложенных транзакций.

http://msdn.microsoft.com/en-us/library/ms187807(v=sql.100).aspx

И команда GO только пакетный сепаратор, он не начинает новую транзакцию. Сделку можно обернуть несколькими партиями.

+0

Да, вставлять и обновлять утверждения только. – user1836155

Смежные вопросы