違いは、「標準コマンド」と呼ばれるものには暗黙的なトランザクションがあるため(「明示的ではない」とは異なり、実際の暗黙的なトランザクションではありません)、INSERT
明示的なトランザクションなしでコマンドを発行するたびに、トランザクションが開かれます。データを挿入して自動的にコミットします。これは自動コミットトランザクションと呼ばれます。
これは、これをロールバックできない理由でもありますINSERT
。すでにコミットされています。したがって、ルールは明示的なトランザクションと同じです。一度コミットされると、ロールバックできません。
SQL Serverの内部から直接、私が何を意味するかを確認できます。
Microsoft sys.fn_dblog
は、指定されたデータベースのトランザクションログ内を調べるために使用できるDMFという名前のSQL Serverを出荷しています。
この簡単な実験では、AdventureWorksデータベースを使用します。
USE AdventureWorks2008;
GO
SELECT TOP 10 *
FROM dbo.Person;
GO
INSERT INTO dbo.Person (FirstName, MiddleName, LastName, Gender, Date)
VALUES ('Never', 'Stop', 'Learning', 'M', GETDATE());
COMMIT;
BEGIN TRAN;
INSERT INTO dbo.Person (FirstName, MiddleName, LastName, Gender, Date)
VALUES ('Never', 'Stop', 'Learning', 'M', GETDATE());
COMMIT;
GO
SELECT *
FROM sys.fn_dblog(NULL, NULL);
GO
ここでは、2つの挿入を行っています。1つは明示的なトランザクションあり、もう1つはなしです。
ログファイルでは、2つの間にまったく違いがないことがわかります。
赤はINSERT
自動コミットトランザクション内、青はINSERT
明示的トランザクションありです。
サードパーティのツールについては、データベースログを分析し、操作を「元に戻す」または「やり直す」ための通常のT-SQLコードを生成します。通常は、ログファイルの内容とは正反対の動作を行うスクリプトを生成する以外、特別なことは何もしません。