Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'te
ambarMicrosoft Fabric'te SQL veritabanı
Tek tek satır silmeleri günlüğe kaydetmeden bir tablodan veya tablonun belirtilen bölümlerinden tüm satırları kaldırır.
TRUNCATE TABLE, DELETE yan tümcesi olmayan WHERE deyimine benzer; ancak TRUNCATE TABLE daha hızlıdır ve daha az sistem ve işlem günlüğü kaynağı kullanır.
Transact-SQL söz dizimi kuralları
Syntax
SQL Server, Azure SQL Veritabanı, Doku SQL veritabanı söz dizimi
TRUNCATE TABLE
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
[ WITH ( PARTITIONS ( { <partition_number_expression> | <range> }
[ , ...n ] ) ) ]
[ ; ]
<range> ::=
<partition_number_expression> TO <partition_number_expression>
Microsoft Fabric, Azure Synapse Analytics ve Paralel Veri Ambarı için söz dizimi.
TRUNCATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ; ]
Arguments
database_name
Veritabanının adı.
schema_name
Tablonun ait olduğu şemanın adı.
table_name
Kesilen veya tüm satırların kaldırıldığı tablonun adı.
table_name değişmez değer olmalıdır.
table_nameOBJECT_ID() işlevi veya değişken olamaz.
WITH ( PARTITIONS ( { <partition_number_expression> | <aralığı> } [ , ... n ] ) )
için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler.
Kesilen veya tüm satırların kaldırıldığı bölümleri belirtir. Tablo bölümlenmemişse, WITH PARTITIONS bağımsız değişkeni bir hata oluşturur.
WITH PARTITIONS yan tümcesi sağlanmamışsa tablonun tamamı kesilir.
<partition_number_expression> aşağıdaki yollarla belirtilebilir:
Bölüm sayısını belirtin, örneğin:
WITH (PARTITIONS (2))Virgülle ayrılmış birkaç bölüm için bölüm numaralarını sağlayın, örneğin:
WITH (PARTITIONS (1, 5))Hem aralıkları hem de tek tek bölümleri sağlayın, örneğin:
WITH (PARTITIONS (2, 4, 6 TO 8))<range>,TOsözcüğüyle ayrılmış bölüm numaraları olarak belirtilebilir, örneğin:WITH (PARTITIONS (6 TO 8))
Bölümlenmiş bir tabloyu kesebilmek için tablo ve dizinler hizalanmalıdır (aynı bölüm işlevinde bölümlenmiş).
Remarks
DELETE deyimiyle karşılaştırıldığında, TRUNCATE TABLE aşağıdaki avantajlara sahiptir:
Daha az işlem günlüğü alanı kullanılır.
DELETEdeyimi satırları birer birer kaldırır ve silinen her satır için işlem günlüğüne bir girdi kaydeder.TRUNCATE TABLEtablo ve dizin verilerini depolamak için kullanılan veri sayfalarını serbest bırakarak verileri kaldırır ve işlem günlüğünde yalnızca sayfa ayırmalarını kaydeder.Genellikle daha az kilit kullanılır.
DELETEdeyimi satır kilidi kullanılarak yürütülürse, tablodaki her satır silinmek üzere kilitlenir.TRUNCATE TABLEher zaman tabloyu (şema (SCH-M) kilidi dahil) ve sayfayı kilitler, ancak her satırı kilitlemez.İstisnasız olarak, tabloda veya dizinlerinde sıfır sayfa kalır.
DELETEdeyimi yürütüldükten sonra tablo yine de boş sayfalar içerebilir. Örneğin, bir yığındaki boş sayfalar en azından özel (LCK_M_X) tablo kilidi olmadan serbest bırakılamaz. Silme işlemi tablo kilidi kullanmıyorsa, tablo (yığın) çok sayıda boş sayfa içerebilir. Dizinler için deyimi arkasındaDELETEboş sayfalar bırakabilir. Bir arka plan temizleme işlemi daha sonra bu sayfaları serbestleştirir.
TRUNCATE TABLE tablodaki tüm satırları kaldırır, ancak tablo yapısı ve sütunları, kısıtlamaları, dizinleri vb. kalır. Verilerine ek olarak tablo tanımını kaldırmak için DROP TABLE deyimini kullanın.
Tabloda bir kimlik sütunu varsa, bu sütunun sayacı sütun için tanımlanan tohum değerine sıfırlanır. Hiçbir tohum tanımlanmamışsa, varsayılan değer 1 kullanılır. Kimlik sayacını korumak için bunun yerine DELETE kullanın.
bir TRUNCATE TABLE işlemi bir işlem içinde geri alınabilir.
Fabric SQL veritabanında, bir tablonun kesilmesi, bu tablo için Doku OneLake'ten tüm yansıtılmış verileri siler.
Ertelenmiş dağıtım
128 veya daha fazla uzantı kullanan bir tablo kesildiğinde, Veritabanı Altyapısı işlem işlemeden sonraya kadar gerçek sayfa ayırmalarını ve ilişkili kilitlerini saptırır. Kesme iki ayrı aşamada gerçekleşir: mantıksal ve fiziksel. Mantıksal aşamada, tablo ve dizinleri tarafından kullanılan mevcut ayırma birimleri serbest bırakma için işaretlenir ve işlem işleyene kadar kilitlenir. Fiziksel aşamada, arka plan işlemi serbest bırakma için işaretlenmiş sayfaları kaldırır. Bu, tarafından TRUNCATE TABLE yayımlanan alanın yeni ayırmalar için hemen kullanılamayabileceği anlamına gelir.
Hızlandırılmış veritabanı kurtarma etkinleştirilirse, kesme, kapsam sayısından bağımsız olarak ayrı mantıksal ve fiziksel aşamalar kullanır.
Limitations
aşağıdaki tablolarda TRUNCATE TABLE kullanamazsınız:
FOREIGN KEYkısıtlaması tarafından başvurulur. Kendisine başvuran yabancı anahtarı olan bir tabloyu kesebilirsiniz.Dizinli görünüme katılın.
İşlem çoğaltması veya birleştirme çoğaltması kullanılarak yayımlanır.
Sistem sürümü zamansaldır.
bir
EDGEkısıtlaması tarafından başvurulur.
Bu özelliklerden birine veya daha fazlasına sahip tablolar için bunun yerine DELETE deyimini kullanın.
TRUNCATE TABLE, işlem tek tek satır silmeleri günlüğe kaydetmediğinden tetikleyiciyi etkinleştiremiyor. Daha fazla bilgi için bkz. create TRIGGER (Transact-SQL)
Azure Synapse Analytics ve Analytics Platform Sistemi'nde (PDW):
TRUNCATE TABLEdeyimindeEXPLAINizin verilmez.TRUNCATE TABLEbir işlemin içinde yürütülemez.
Permissions
Gereken en düşük izin ALTER.
TRUNCATE TABLE izinler varsayılan olarak tablo sahibine, sabit sunucu rolünün sysadmin üyelerine db_owner ve ve db_ddladmin sabit veritabanı rollerine devredilemez. Ancak TRUNCATE TABLE deyimini saklı yordam gibi bir modüle ekleyebilir ve EXECUTE AS yan tümcesini kullanarak modüle uygun izinleri verilmektedir.
Examples
A. Tabloyu kesme
Aşağıdaki örnek, JobCandidate tablosundaki tüm verileri kaldırır.
SELECT deyimleri, sonuçları karşılaştırmak için TRUNCATE TABLE deyiminden önce ve sonra eklenir.
USE AdventureWorks2022;
SELECT COUNT(*) AS BeforeTruncateCount
FROM HumanResources.JobCandidate;
TRUNCATE TABLE HumanResources.JobCandidate;
SELECT COUNT(*) AS AfterTruncateCount
FROM HumanResources.JobCandidate;
B. Tablo bölümlerini kesme
için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler.
Aşağıdaki örnek, bölümlenmiş tablonun belirtilen bölümlerini kesmektedir.
WITH (PARTITIONS (2, 4, 6 TO 8)) söz dizimi 2, 4, 6, 7 ve 8 bölüm numaralarının kesilmesine neden olur.
TRUNCATE TABLE PartitionTable1
WITH (PARTITIONS (2, 4, 6 TO 8));
GO
C. Kesme işlemini geri alma
Aşağıdaki örnekte, bir işlem içindeki TRUNCATE TABLE işleminin geri alınabileceği gösterilmektedir.
Üç satırlı bir test tablosu oluşturun.
USE [tempdb]; CREATE TABLE TruncateTest (ID INT IDENTITY (1, 1) NOT NULL); GO INSERT INTO TruncateTest DEFAULT VALUES; GO 3Kesmeden önce verileri denetleyin.
SELECT ID FROM TruncateTest;Bir işlem içindeki tabloyu kırpın ve satır sayısını denetleyin.
BEGIN TRANSACTION; TRUNCATE TABLE TruncateTest; SELECT ID FROM TruncateTest;Tablonun boş olduğunu görürsünüz.
İşlemi geri alın ve verileri denetleyin.
ROLLBACK TRANSACTION; SELECT ID FROM TruncateTest;Üç satırı da görürsünüz.
Masayı temizleyin.
DROP TABLE TruncateTest;
İlgili içerik
- SILME (Transact-SQL)
- DROP TABLE (Transact-SQL)
- CREATE TABLE (Transact-SQL) IDENTITY (Özellik)