DELETE (Transact-SQL)

Satır, bir tablo veya görünümden kaldırır.

Topic link iconTransact-SQL sözdizimi kuralları

[ WITH <common_table_expression> [ ,...n ] ]
DELETE 
    [ TOP ( expression ) [ PERCENT ] ] 
    [ FROM ] 
    { <object> | rowset_function_limited 
      [ WITH ( <table_hint_limited> [ ...n ] ) ]
    }
    [ <OUTPUT Clause> ]
    [ FROM <table_source> [ ,...n ] ] 
    [ WHERE { <search_condition> 
            | { [ CURRENT OF 
                   { { [ GLOBAL ] cursor_name } 
                       | cursor_variable_name 
                   } 
                ]
              }
            } 
    ] 
    [ OPTION ( <Query Hint> [ ,...n ] ) ] 
[; ]

<object> ::=
{ 
    [ server_name.database_name.schema_name. 
      | database_name. [ schema_name ] . 
      | schema_name.
    ]
        table_or_view_name 
}

Bağımsız değişkenler

  • > < Common_table_expression
    DELETE deyiminin kapsam içinde tanımlanan geçici adlandırılmış sonuç kümesi, tablo ifade olarak da bilinen genel belirtir.Sonuç kümesi deyim türetilir.

    Ortak tablo ifadeler, SELECT, INSERT, UPDATE ve CREATE VIEW ekstreleri de kullanılabilir.Daha fazla bilgi için bkz:WITH common_table_expression (Transact-SQL).

  • TOP (expression) [ PERCENT ]
    Specifies the number or percent of random rows that will be deleted.expression can be either a number or a percent of the rows.INSERT, UPDATE veya DELETE kullanılan TOP ifadesinde başvurulan satırları herhangi bir sırada düzenlenirler.

    Sınırlayan parantez expression TOP INSERT, UPDATE ve DELETE deyimlerinde gereklidir. Daha fazla bilgi için bkz:TOP (Transact-SQL).

  • GELEN
    DELETE anahtar sözcüğünü ve hedef arasında kullanılan isteğe bağlı bir anahtar sözcük iş table_or_view_name, veya rowset_function_limited.

  • server_name
    Sunucu adı (bir bağlantılı sunucu adını kullanarak veya opendatasource işlev sunucu adıyla), tablo veya görünümü yer alır.If server_name , belirtilen database_name ve schema_name gereklidir.

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

  • schema_name
    Hangi şema adı tablo veya görünüme ait.

  • table_or view_name
    Tablo veya Görünüm içinden satırları kaldırılacak olan adıdır.

    C table değişken, bu kapsamdaki, DELETE deyim Tablo kaynağı olarak kullanılabilir.

    Tarafından başvuruda bulunulan görünümü table_or_view_name yükl olmalıdır tablo ve tam olarak bir temel tablo görünümünün FROM yan tümcesinde. Güncelleştirilebilir görünümler hakkında daha fazla bilgi için bkz: VIEW (Transact-SQL) CREATE.

  • rowset_function_limited
    Ya da iş openquery or openrowset işlev, sağlayıcı yeteneklerini tabidir.Sağlayıcı tarafından gerekli özellikleri hakkında daha fazla bilgi için bkz: UPDATE ve OLE DB sağlayıcıları için gereksinimleri DELETE.

  • WITH ( <table_hint_limited> [... n] )
    Hedef tablo için izin verilen bir veya daha fazla tablo ipuçları belirtir.WITH anahtar sözcüğünü ve ayraçlar gereklidir.NOLOCK ve READUNCOMMITTED izin verilmez.Tablo ipuçları hakkında daha fazla bilgi için bkz: Tablo ipuçları (Transact-SQL).

  • <OUTPUT_Clause>
    Verir, satır ya da SILME işlemi bir parçası olarak bunları temel alan bir ifade sildi.OUTPUT yan tümce, görünümler veya uzak tablo yönlendirilmesi herhangi DML deyimlerini desteklenmiyor.Daha fazla bilgi için bkz:OUTPUT yan tümce (Transact-SQL).

  • > < Table_source
    Ek bir FROM yan tümce belirtir.Bu Transact-SQL DELETE uzantısı verilerini belirleme sağlar. <tablo _source> ve buna karşılık gelen silme gelen satırlar tablo içindeki ilk FROM yan tümce.

    birleştirmek, belirterek, bu uzantı kaldırılacak bir sorguda satırları tanımlamak için WHERE yan tümce yerine kullanılabilir.

    Daha fazla bilgi için bkz:Transact-SQL ().

  • BURADA
    Silinen satır sayısını sınırlamak için kullanılan bir koşul belirtir.Bir WHERE yan tümce sağlanan DELETE tüm satırları tablodan kaldırır.

    WHERE yan tümcesinde belirtilen temel alarak silme işlemlerinin iki biçimi vardır:

    • Aranan siler, silinecek satırları nitelemek için bir arama koşulu belirtin.Örneğin, WHERE column_name = value.

    • Konumlandırılmış siler CURRENT OF yan tümce, bir imleç belirtmek için kullanın.Silme işlemi, imleç geçerli konumuna oluşur.Bu bir WHERE kullanan Aranan DELETE deyim'den daha doğru olabilir search_condition Silinecek satırları nitelemek için yan tümce. Arama koşulu tek bir satırı benzersiz şekilde tanımlamaz Aranan DELETE deyim birden çok satırı siler.

  • <search_condition>
    Silinecek satırları kısıtlama koşullarını belirtir.Bir arama koşulunda yer yüklemler sayısına bir sınır yoktur.Daha fazla bilgi için bkz:Arama koşulu (Transact-SQL).

  • CARİ
    SILME geçerli konumuna belirtilen imlecin gerçekleştirildiğini belirtir.

  • GENEL
    Belirtir cursor_name bir genel imlecine başvuruyor.

  • cursor_name
    Getirme yapıldığı açık imleç adıdır.Varsa, hem genel hem de bir yerel imleç adı cursor_name Mevcut, GENEL belirtilen; aksi durumda ise, bu bağımsız değişkeni genel imleci başvuruyor, bunun için bir yerel imleç başvuruyor. imleç, güncelleştirmelere izin vermek gerekir.

  • cursor_variable_name
    Imleç bir değişken adıdır.Imleç değişken güncelleştirmelere olanak veren bir imleç başvurmalıdır.

  • OPTION ( <query_hint> [ ,... n] )
    Anahtar sözcük En iyi hale getirme ipuçları biçimini özelleştirmek için kullanıldığını belirtmek misiniz Database Engine deyim işler. Daha fazla bilgi için bkz:Sorgu ipuçları (Transact-SQL).

Remarks

Değiştirilen nesne ise, kullanıcı tanımlı bir işlev gövdesine DELETE kullanılabilir bir table değişken.

DELETE deyim başarısız olabilir, tetikleyici ihlal ediyor veya başka bir veri tarafından başvuruda bulunulan satır temizlemeye tablo bir yabancı anahtar kısıtlaması ile.Birden çok satır SILME kaldırır ve kaldırılan satırları herhangi birini bir tetikleyici veya kısıtlamayı ihlal, deyim iptal, bir hata döndürdü ve hiçbir satır kaldırılır.

DELETE ifade (taşma, sıfır veya bir etki alanı hata bölme) aritmetik hatayla karşılaştığında ifade değerlendirme sırasında gerçekleşen Database Engine küme ARITHABORT ON olarak ayarlandığında, bu hatalar işler. toplu iş iş işin kalan iptal edilir ve bir hata iletisi döndürdü.

küme ROWCOUNT seçeneğinin ayarını uzak tablo ve yerel ve uzak bölümlendirilmiş görünümlerde DELETE deyimleri için yoksayılır.

Tüm satırları silmek istiyorsanız bir tablo, DELETE deyim WHERE yan tümce belirtmeden veya kullanın KESİRLİ KISMINI tablo.TRUNCATE tablo DELETE hızlıdır ve daha az sistem ve hareket günlüğü kaynağı kullanır.

Bir yığın satır silme

Ne zaman bir öbekten satırlar siliniyor Database Engine satır veya sayfa için bir işlem kilitleme kullanır. Sonuç olarak, silme işlemi tarafından boş yapılan sayfaları yığına ayrılmış kalır.Boş sayfaları ayırmanın, ilişkili alan veritabanındaki başka nesneler tarafından yeniden kuramıyor.

Yığın satırları silin ve sayfaları ayırması için aşağıdaki yöntemlerden birini kullanın.

  • DELETE deyiminde TABLOCK ipucu belirtSilme işlemi paylaşılan kilit almak neden olan TABLOCK ipucu kullanarak tablo yerine, bir satır veya sayfa kilidi.Bu sayfaları ayırmanın sağlar.TABLOCK ipucu hakkında daha fazla bilgi için bkz: Tablo ipuçları (Transact-SQL).

  • Tüm satırları tablodan silinecek TRUNCATE tablo kullanın.

  • Satırları silmeden önce kümelenmiş dizin öbek üzerinde oluşturun.Kümelenmiş dizin, satırları silindikten sonra bırakma.Bu yöntem fazla saat önceki yöntemlerden alabilir, daha fazla geçici kaynak kullanır.

Kilitleme hakkında daha fazla bilgi için bkz: Veritabanı Altyapısı ' kilitleme.

DELETE eylemler üzerinde bir INSTEAD OF Tetikleyici kullanma

Bir INSTEAD OF tetikleyicisi DELETE eylemleri karşı bir tablo veya Görünüm tanımlandığında, tetik yerine DELETE deyim yürütür.Önceki sürümleri SQL Server yalnızca, SONRA DELETE ve diğer veri değişikliği deyimleri Tetikleyicileri destekler. FROM yan tümce, dolaysız veya dolaylı olarak, bir görünüm ile tanımlanmış bir INSTEAD OF tetikleyicisi başvuran DELETE deyim tarif edilemez.Daha fazla bilgi için ıNSTEAD OF tetikleri, bkz: (Transact-SQL) TRIGGER CREATE.

İzinler

DELETE hedef tablo üzerinde izinleri gerekir.Deyim bir WHERE yan tümce içeriyorsa, SELECT izinlerine de gereklidir.

Izinleri varsayılan üyelere DELETE sysadmin sabit sunucu rolüdb_owner and db_datawriter veritabanı rollerini, sabit ve tablo sahip.Üyeleri sysadmin, db_owner, and the db_securityadmin roller ve tablo sahibine izinler diğer kullanıcılara transfer edebilirsiniz.

Örnekler

C.DELETE hiçbir WHERE yan tümce ile birlikte kullanma

Aşağıdaki örnekte,'den tüm satırlar silinir SalesPersonQuotaHistory çünkü tablo bir WHERE yan tümce, silinen satırların sayısını sınırlamak için kullanılmaz.

b.Satır bir DELETE kullanma

Aşağıdaki örnekte,'den tüm satırlar silinir ProductCostHistory Tablo, değer StandardCost Sütun birden fazla 1000.00.

c.DELETE, imleç geçerli satır kullanma

Aşağıdaki örnekte, tek bir satırdan silinir EmployeePayHistory Tablo adında bir imleç kullanma complex_cursor. Silme işlemi, yalnızca geçerli imleç getirilen tek satır etkiler.

d.Bir alt sorgunun alarak DELETE kullanarak ve Transact-SQL uzantısı'nı kullanma

Aşağıdaki örnekte gösterildiği Transact-SQL dahili bir birleştirmek işlemini temel alan veya alt sorgu correlated temel tablodan kayıtları silmek için kullanılır. Ilk DELETE deyim ISO uyumlu alt sorgu çözüm ve ikinci gösterir. DELETE deyim gösterir Transact-SQL Uzantı. Her iki sorgu satırlarını kaldırma SalesPersonQuotaHistory tabloda depolanan yıl, tarih satış temel SalesPerson TABLO.

e.DELETE ile TOP kullanarak yan tümce

Aşağıdaki örnek siler. 2.5 satır (27 satır), yüzde ProductInventory TABLO.

f.DELETE OUTPUT yan tümcesiyle birlikte kullanma

Aşağıdaki örnekte, sonuçlar kaydetmek gösterilmiştir bir DELETE deyim bir tablo değişkeni olarak.

g.DELETE deyiminde from_table_name OUTPUT kullanma

Aşağıdaki örnekte, satırlar silinir ProductProductPhoto tablosunda tanımlanan arama ölçütleri temel alan FROM ın yan tümce DELETE deyim. The OUTPUT yan tümce returns columns from the tablo being deleted, DELETED.ProductID, DELETED.ProductPhotoID, and columns from the Product tablo. Bu kullanılan FROM Silinecek satırları belirtmek için yan tümce.