BEGIN TRANSACTION (Transact-SQL)

Açık, yerel bir hareketin başlangıç noktasını işaretler.BEGIN TRANSACTION @@ trancount birer birer artar.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

BEGIN { TRAN | TRANSACTION } 
    [ { transaction_name | @tran_name_variable }
      [ WITH MARK [ 'description' ] ]
    ]
[ ; ]

Bağımsız değişkenler

  • transaction_name
    İşlem adı atanır.transaction_nametanımlayıcılar, ancak 32 karakter değil izin verilenden daha uzun tanımlayıcıları kurallarına uyması gerekir.Yalnızca iç içe geçmiş BEGIN en dıştaki çiftinin üzerinde işlem adlarını kullan...TAMAMLAMA veya başlamak...rollback deyimleri.

  • @tran_name_variable
    Kullanıcı tanımlı bir değişken adını içeren geçerli hareket adı.Değişken ile bildirilmesi gerekir bir char, varchar, nchar, veya nvarchar veri türü.Sadece ilk 32 karakter uzunluğu 32 karakterden fazla değişken belirtilmediyse, kullanılacak; kalan karakterler kesilecek.

  • İŞARETİYLE 'description'
    Hareket günlüğüne işaretlendiğini belirtir.descriptionişareti açıklayan bir dize ' dir.A description artık 128 karakter kesiliyor çok 128 karakter depolanıyor önce değer msdb.dbo.logmarkhistory tablo.

    WITH mark kullanılırsa, hareket adı belirtilmelidir.İŞARETİ ile işlem günlüğü adlandırılmış işareti geri yüklemek için izin verir.

Açıklamalar

BEGIN TRANSACTION, mantıksal ve fiziksel olarak tutarlı bir bağlantı tarafından başvurulan veri olduğu noktayı temsil eder.Hatalar oluşursa, BEGIN TRANSACTION sonra yapılan tüm veri değişiklikleri verileri tutarlı bilinen bu duruma döndürmek için geri.Her hareket ya da hatasız tamamlayan ve hareket TAMAMLAMA değişiklikleri veritabanına kalıcı bir parçası haline getirmek için verilen veya hatalarla karşılaştı ve tüm değişiklikleri geri alma HAREKETİ deyimile silinmesi kadar sürer.

BEGIN TRANSACTION deyimveren bağlantı için yerel bir hareket başlatır.Geçerli hareket yalıtım düzeyi ayarlarına bağlı olarak, pek çok kaynak alınan desteklemek için Transact-SQL bağlantı tarafından verilen ifadeler kilitli olduğu hareketin hareket TAMAMLAMA veya rollback İŞLEMİNİ deyimile tamamlanıncaya kadar.saat bekleyen sol hareketleri, diğer kullanıcıların bu kilitli kaynaklara erişmelerini engelleyebilir ve günlük kesilme de engel olabilir.

Yerel işlem BEGIN TRANSACTION başlar, ancak uygulamanın sonradan bir INSERT, update çalıştırma gibi günlüğüne kaydedilmesi veya delete deyimbir eylem gerçekleştirir kadar hareket günlüğüne kaydedilmez.Bir uygulama select deyimleri hareketi yalıtım düzeyi korumak için kilitleri alınıyor gibi eylemleri gerçekleştirebilirsiniz, ancak uygulama değişikliği eylemtamamlanana kadar hiçbir şey günlüğe kaydedilir.

İç içe geçmiş hareketleri bir dizi birden çok hareketleri ile hareket adı adlandırma hareket üzerinde çok az etkisi vardır.Yalnızca ilk (en dıştaki) hareket adı sisteme kayıtlı değil.Geri alma için herhangi bir diğer ad (geçerli kayıt noktası adı), bir hata üretir.Önce geri alma yürütülen deyimleri hiçbiri olgubu hata oluşur saat döndürülür.İfadeleri geri alınır sadece ne zaman dış işlem geri alınır.

deyim kabul edildiğini veya geri önce aşağıdaki eylemleri gerçekleştirdiyseniz BEGIN TRANSACTION deyim başlatılan yerel işlem dağıtılmış işlem aktarılana:

  • uzak tablo bağlantılı sunucu başvuran bir INSERT, delete veya update deyim yürütülür.bağlantılı sunucu erişmek için kullanılan ole DBsağlayıcı desteklemediği, INSERT, update veya delete deyim başarısız ITransactionJoinarabirim.

  • REMOTE_PROC_TRANSACTIONS seçeneği küme açık olduğunda bir uzak saklı yordam çağrısı yapılır.

Yerel kopyasını SQL Server hareket denetleyicisi olur ve kullanan Microsoft Dağıtılmış İşlem Düzenleyicisi dağıtılmış işlemyönetmek için (ms dtc).

Bir hareket, bir ' % s'hareketi dağıtılmış işlem olarak başlamak Dağıtılmış İşlem Düzenleyicisi'ni kullanarak açıkça yürütülebilir.Daha fazla bilgi için, bkz. Dağıtılmış Hareket (Transact-SQL) başlamak.

İşaretli işlemler

WITH mark seçeneği, hareket günlüğüne yerleştirilmesi hareket adı neden olur.Bir veritabanını önceki bir durumuna geri işaretli hareket tarih ve saatyerine kullanılabilir.Daha fazla bilgi için, bkz. İşaretli işlemler (tam kurtarma modeli) kullanma ve RESTORE (Transact-SQL).

Ayrıca, işlem günlüğü işaretleri, kurtarmak için bir küme , mantıksal olarak tutarlı bir duruma ilişkili veritabanlarını gerekiyorsa gereklidir.İşaretleri dağıtılmış işlemile ilişkili veritabanlarının işlem günlüklerinde yerleştirilebilir.küme , bir küme ETE veritabanlarının bu işaretleri sonuçlar ilgili veritabanları kurtarma.İlişkili veritabanları işaretleri yerleşimini özel yordamlar gerektirir.

Yalnızca veritabanı tarafından işaretlenen hareket güncelleştirilirse işareti hareket günlüğüne yerleştirilir.Veri değiştirme işlemleri olarak işaretlenmemiş.

tran başlamak new_name ile işaretlemek yuvalanmış işaretlenmemiş zaten varolan bir hareket içinde.Böylece, üzerine new_name Hareket zaten verilmiş adýna hareket işareti adı haline gelir.Aşağıdaki örnekte, M2 adı işareti.

BEGIN TRAN T1;
UPDATE table1 ...;
BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT * from table1;
COMMIT TRAN M2;
UPDATE table3 ...;
COMMIT TRAN T1;

Hareketleri baþtaki zaten bir hareket işaretlemek çalışıyor (hata) uyarı iletisi sonuçlar işaretli:

"... TRAN T1 İŞARETİ İLE BAŞLAR;"

"tablo1... güncelleştirme;"

"... TRAN M2 İŞARETİ İLE BAŞLAR;"

"server: Msg 3920, Düzey 16, State 1, satır 3 "

"İşareti ile seçenek yalnızca ilk başlamak tran ile işaretlemek için geçerlidir."

"seçeneği yoksayılır."

İzinler

Üyelik gerektiren public rolü.

Örnekler

A.Bir hareket adlandırma

Aşağıdaki örnek, nasıl bir işlem adını gösterir.

DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';

BEGIN TRANSACTION @TranName;
USE AdventureWorks2008R2;
DELETE FROM AdventureWorks2008R2.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;

COMMIT TRANSACTION @TranName;
GO

B.Bir hareket işaretleme

Aşağıdaki örnek, bir hareket işaretlemek gösterilmiştir.Hareket CandidateDelete işaretlenmiştir.

BEGIN TRANSACTION CandidateDelete
    WITH MARK N'Deleting a Job Candidate';
GO
USE AdventureWorks2008R2;
GO
DELETE FROM AdventureWorks2008R2.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION CandidateDelete;
GO