Share via


KESME tablo (Transact-SQL)

Tüm satırları kaldırır bir tablo tek tek satır silme oturumu.TRUNCATE tablo DELETE deyim WHERE yan tümce ile; benzer ancak TRUNCATE tablo daha hızlı ve daha az sistem ve hareket günlüğü kaynağı kullanır.

Topic link iconTransact-SQL sözdizimi kuralları

TRUNCATE TABLE 
    [ { database_name.[ schema_name ]. | schema_name . } ]
    table_name
[ ; ]

Bağımsız değişkenler

  • database_name
    Veritabanının adıdır.

  • schema_name
    Hangi şema adı tablo ait.

  • table_name
    Adı tablo kesilmesinden veya hangi tüm satırlar için sonuna kaldırılır.

Remarks

TRUNCATE tablo, DELETE deyim için karşılaştırıldığında, aşağıdaki avantajları vardır:

  • Daha az işlem günlük alanı kullanılır.

    DELETE deyim, bir kerede bir satır kaldırır ve silinen her satır için hareket günlüğüne bir girdi kaydeder.TRUNCATE TABLE tablo verilerini depolamak için kullanılan veri sayfalarının ayırmayı kaldırma tarafından verileri kaldırır ve yalnızca sayfa deallocations hareket günlüğüne kaydeder.

  • Daha az kilitlerin kullanılır.

    DELETE deyim yürütüldüğünde bir satır kilit'ni kullanarak, her içinde satır tablo silinmek için kilitlendi.TRUNCATE tablo, tabloyu ve sayfa ancak değil her satır her zaman kilitler.

  • Özel durum, sıfır sayfaları içinde kalması tablo.

    DELETE deyim yürütüldükten sonra tablo boş sayfaları yine de içerebilir.Örneğin, bir yığın boş sayfaları en az bir özel (LCK_M_X) ayırmanın edemiyor tablo kilit.Silme işlemini bir tablo kilit kullanmayı seçerseniz, tablo (yığın) fazla boş sayfaları içerir.Bu sayfaları hızla bir arka plan temizleme işlemi tarafından ayırmanın, ancak, dizinler için silme işlemi arkasında, boş sayfaları bırakabilirsiniz.

TRUNCATE TABLE tablodan tüm satırları kaldırır, ancak tablo yapısını ve, sütunlar, kısıtlamalar, dizinler vb. olarak kalır.Tablo tanımı, verilere ek olarak kaldırmak için , DROP TABLE deyim kullanın.

tablo O sütun için sütun için tanımlanan Çekirdek değeri sıfırlanır sayaç, kimlik sütunu içerir.Hiçbir çekirdek tanımlanmışsa, varsayılan değer olarak 1 kullanılır.Kimlik sayacı korumak için , DELETE kullanın.

Kısıtlamalar

TRUNCATE tablo kullanamazsınız, açık tablolar:

  • Bir yabancı anahtar kısıtlaması tarafından başvurulan.(Kendisini başvuran yabancı anahtar olan bir tabloda kesecek.)

  • dizinli görünüm katılabilirsiniz.

  • Işlem çoğaltma veya birleştirme çoğaltma kullanarak yayımlandı.

Aşağıdakilerden bir veya daha fazlası bu özelliklere sahip tablolar için DELETE deyim kullanın.

TRUNCATE tablo, işlem tek tek satır silme oturum için bir tetikleyici etkinleştiremezsiniz.Daha fazla bilgi için bkz:(Transact-SQL) TRIGGER CREATE.

Büyük bir tablo kesiliyor

Microsoft SQL Server bırakma yeteneği olan veya 128'den fazla kapsamlarını tüm kapsamları eşzamanlı kilitlerin tutmadan kesilmesinden tablonuz için bırakma gerekli.Daha fazla bilgi için bkz:Bırakma ve büyük nesneleri yeniden oluşturma.

İzinler

Gereken en düşük ALTER üzerinde izindir table_name. TRUNCATE tablo izinleri varsayılan olarak tablonun sahibi, üyeleri sysadmin sabit sunucu rolü ve db_owner and db_ddladmin veritabanı rollerini sabit ve transfer edilebilir değildir.TRUNCATE tablo deyim, saklı yordam gibi bir modül içinde birleştirmek ve modül yürütmek AS kullanarak uygun izinleri vermelisiniz ancak yan tümce.Daha fazla bilgi için bkz:Özel bir izin kümesi oluşturmak için yürütmek AS kullanma.

Örnekler

The following example removes all data from the JobCandidate table.SELECT statements are included before and after the TRUNCATE TABLE statement to compare results.

USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO