Aracılığıyla paylaş


DELETE (Transact-SQL)

Bir tablo veya Görünüm satır kaldırır.

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

Sözdizimi

[ 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

  • İLE <common_table_expression>
    sonuç kümesiadlı geçici belirtir olarak da bilinen ortak tabloifade, tanımlanan kapsam delete deyimiçinde. sonuç kümesi , bir select deyimtüretilir.

    Ortak tablo ifadeleri, select, INSERT, update ve create VIEW deyimleri ile de kullanılabilir.Daha fazla bilgi için, bkz. Common_table_expression (Transact-SQL) ile.

  • TOP (expression) [ PERCENT ]
    Sayı veya silinecek rasgele satırların yüzdesini belirtir.expressionbir sayı veya satırları yüzdesi olabilir.INSERT, update veya delete ile kullanılan üst ifade içinde başvurulan satır herhangi bir sırayla düzenlenmiş değil.

    Sınırlayan parantez expression üst içinde gerekli olan, INSERT, update ve delete deyimlerini.Daha fazla bilgi için, bkz. ÜST (Transact-SQL).

  • DAN
    delete anahtar sözcüğü ile hedefarasında kullanılan isteğe bağlı bir anahtardırtable_or_view_name, veya rowset_function_limited.

  • server_name
    Sunucunun adıdır ( bağlantılı sunucu adını kullanarak veya opendatasource işlev sunucu adı), tablo veya Görünüm olduğu yer.server_name Belirlendiğinde, database_name ve schema_name gereklidir.

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

  • schema_name
    tablo ya da görünümün ait olduğu şema addır.

  • table_or view_name
    tablo veya görünüm içinden kaldırılacak satırları olan addır.

    A table kapsam, içindeki değişkeni de kullanılabilir bir Sil deyim tablokaynak olarak.

    Görünüm tarafından başvurulan table_or_view_name gerekir güncellenebilir ve başvuru tam olarak temel tablo from yan tümce görünüm.Güncelleştirilebilir görünümler hakkında daha fazla bilgi için bkz: CREATE VIEW (Transact-SQL).

  • rowset_function_limited
    Ya SORGUAÇ veya 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 delete ole db sağlayıcıları için gereksinimleri.

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

  • <OUTPUT_Clause>
    Satır veya silme işleminin parçası olarak bunları temel ifadeler döndürür sildi.output yan tümce tüm DML deyimlerini uzak tabloları veya görünümler hedefleme desteklenmiyor.Daha fazla bilgi için, bkz. output yan tümcesi (Transact-SQL).

  • DAN <table_source>
    Ek bir from yan tümcebelirtir.Bu Transact-SQL Silinecek uzantı sağlar belirterek verileri <table_source> ve ilk from tablo satırları silme ilgili yan tümce.

    birleştirmekbelirterek, bu uzantı kaldırılacak satırları tanımlamak için where yan tümce alt alt sorgu 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 koşul belirtir.where yan tümce sağlanmayan, Sil tüm satırları tablokaldırır.

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

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

    • Konumlandırılmış siler current of yan tümce bir imleçbelirtmek için kullanın.Silme işlemi, geçerli imleçkonumunda oluşur.Bu where kullanan Aranan delete deyim daha doğru olabilir search_conditionsilinecek satır nitelemek içinyan 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.arama koşuludahil yüklemler sayısına bir sınır yoktur.Daha fazla bilgi için, bkz. Arama koşulu (Transact-SQL).

  • GEÇERLİ
    delete geçerli belirtilen imleçkonumuna gerçekleştirildiğini belirtir.

  • GENEL
    Belirleyen cursor_name Genel imleçbaşvurur.

  • cursor_name
    Alımı yapıldığı açık imleç adıdır.Hem genel hem de bir yerel imleç adı ise cursor_name var, bu bağımsız değişkeni belirtir genel imleç , global belirtilir; Aksi halde, yerel imleçbaşvurur.imleç , güncelleştirmeleri izin vermesi gerekir.

  • cursor_variable_name
    Bir imleç değişken adıdır.imleç değişken güncelleştirmelere olanak veren bir imleç bulunmanız gerekir.

  • OPTION ( <query_hint> [ ,... n] )
    En iyi hale getirme ipuçları şeklini özelleştirmek için kullanılır gösteren sözcükler Veritabanı Altyapısı deyimişler.Daha fazla bilgi için, bkz. Sorgu ipuçları (Transact-SQL).

Açıklamalar

delete değiştirilmiş nesne ise kullanıcı tanımlı bir işlev gövdesinde kullanılabilir bir table değişkeni.

Tetikleyici ihlal ediyor veya verileri başka bir tablo bir yabancı anahtar kısıtlaması tarafından başvurulan bir satır temizlemeye delete deyim başarısız olabilir.Birden fazla satır silme kaldırır ve kaldırılan satır herhangi bir tetikleyici veya kısıtlamayı ihlal, deyim iptal, bir hata döndürülür ve hiçbir satır kaldırılır.

delete, deyim (taşma, sıfır ya da bir etki alanı hata bölme) aritmetik hata karşılaştığında ifade değerlendirme sırasında gerçekleşen Veritabanı Altyapısı Bu hataları işleme gibi ise set ARITHABORT küme on.toplu iş kalanı iptal edilir ve bir hata iletisi döndürülür.

set rowcount seçeneği ayar, uzak tablo ve yerel ve uzak bölümlendirilmiş görünümlerde karşı delete deyimleri için yoksayılır.

tabloiçindeki tüm satırları silmek isterseniz, delete deyim where yan tümcebelirtmeden veya kullanın truncate table.truncate table, delete hızlıdır ve daha az sistem ve işlem günlüğü kaynağı kullanır.

Bir öbekten satırları silmek

Ne zaman satır silinir bir öbekten Veritabanı Altyapısı satır ya da sayfa kilitleme işlemi kullanabilirSonuç olarak, silme işlemi tarafından yapılan boş sayfaları yığına ayrılmış kalır.Boş sayfaları ayırmanın değil, ilişkili alanı veritabanındaki diğer nesnelere göre yeniden kullanılamaz.

Bir yığın satırları silin ve sayfaları serbest bırakmak için aşağıdaki yöntemlerden birini kullanın.

  • tablock ipucu delete deyimbelirtin.tablock ipucu kullanarak silme işlemi ' % s'tablosundaki tablo satır veya sayfakilityerine paylaşılan kilit almak neden olur. Bu sayfaları bırakılmasına olanak sağlar.tablock ipucu hakkında daha fazla bilgi için bkz: Tablo İpuçları (Transact-SQL).

  • Tüm satırlar tablosilinecek truncate table kullanın.

  • kümelenmiş dizin satırları silmeden önce öbek üzerinde oluşturun.kümelenmiş dizin satır silindiğinde bırakabilir.Bu yöntem önceki yöntemler tüketen daha fazla saat ve daha fazla geçici kaynak kullanır.

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

delete eylemleri bir INSTEAD of tetikleyicisi kullanarak

Tetikleyici silme eylemleri karşı bir tablo ya da görünüm üzerinde bir INSTEAD of tetikleyicisi tanımladığınızda yerine delete deyimyürütür.Önceki sürümlerinde SQL Server tek destek sonra delete tetikleyicilerinin ve diğer veri değişikliği deyimleri.Bir görünümü üzerinde tanımlı bir INSTEAD of tetikleyicisi ile doğrudan veya dolaylı olarak başvuran delete deyim from yan tümce belirtilemez.Hakkında Tetikleyiciler yerine daha fazla bilgi için bkz: CREATE TRIGGER (Transact-SQL).

İzinler

SİLME izinleri hedef tablogerekir.deyim bir where yan tümceiçeriyorsa, select izin de gereklidir.

Üyeleri için varsayılan izinler silmek sysadmin sabit sunucu rolü, db_owner ve db_datawriter sabit veritabanı rolleri ve tablo sahibi.Üyeleri sysadmin, db_ownerve db_securityadmin rolleri ve tablo sahibi diğer kullanıcılara izinler aktarma.

Örnekler

A.delete hiçbir where yan tümceile kullanma

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

USE AdventureWorks2008R2;
GO
DELETE FROM Sales.SalesPersonQuotaHistory;
GO

B.Bir küme satır delete kullanma

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

USE AdventureWorks2008R2;
GO
DELETE FROM Production.ProductCostHistory
WHERE StandardCost > 1000.00;
GO

C.Bir imleçgeçerli satırda delete kullanma

Aşağıdaki örnek, tek bir satırdan siler EmployeePayHistory tablo kullanarak imleç adlı complex_cursor.Yalnızca geçerli imleçgetirilen tek satır silme işlemini etkiler.

USE AdventureWorks2008R2;
GO
DECLARE complex_cursor CURSOR FOR
    SELECT a.BusinessEntityID
    FROM HumanResources.EmployeePayHistory AS a
    WHERE RateChangeDate <> 
         (SELECT MAX(RateChangeDate)
          FROM HumanResources.EmployeePayHistory AS b
          WHERE a.BusinessEntityID = b.BusinessEntityID) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
DELETE FROM HumanResources.EmployeePayHistory
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO

D.Transact -SQL uzantısı kullanılarak ve üzerinde bir alt sorgu temel alan delete kullanma

Aşağıdaki örnekte gösterildiği Transact-SQL bir birleştirmek veya bağıntılı alt sorgutemel bir temel tablo kayıtları silmek için kullanılan uzantısı.İlk DELETE deyim gösterir ISO uyumlu alt sorgu çözüm ve ikinci DELETE deyim gösterir Transact-SQL uzantısı.Her iki sorgu satırlarını kaldırma SalesPersonQuotaHistory tablo temel alan bir yıl-için-depolanantarih satış SalesPerson tablo.

-- SQL-2003 Standard subquery

USE AdventureWorks2008R2;
GO
DELETE FROM Sales.SalesPersonQuotaHistory 
WHERE BusinessEntityID IN 
    (SELECT BusinessEntityID 
     FROM Sales.SalesPerson 
     WHERE SalesYTD > 2500000.00);
GO
-- Transact-SQL extension
USE AdventureWorks2008R2;
GO
DELETE FROM Sales.SalesPersonQuotaHistory 
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER JOIN Sales.SalesPerson AS sp
ON spqh.BusinessEntityID = sp.BusinessEntityID
WHERE sp.SalesYTD > 2500000.00;

GO

E.delete ile üst yan tümcekullanarak

Aşağıdaki örnek siler 2.5 satırlarının (27 satırlar) yüzde ProductInventory tablo.

USE AdventureWorks2008R2;
GO
DELETE TOP (2.5) PERCENT 
FROM Production.ProductInventory;
GO

F.delete ile output yan tümcekullanarak

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

USE AdventureWorks2008R2;
GO
DELETE Sales.ShoppingCartItem
OUTPUT DELETED.* 
WHERE ShoppingCartID = 20621;

--Verify the rows in the table matching the WHERE clause have been deleted.
SELECT COUNT(*) AS [Rows in Table] FROM Sales.ShoppingCartItem WHERE ShoppingCartID = 20621;
GO

G.Çıkış from_table_name delete deyimile kullanma

Aşağıdaki örnekte satır silinir ProductProductPhototanımlanan arama ölçütleri temeltablo FROMyan tümce DELETEdeyim. OUTPUTyan tümce tablo silinmiş sütunlar döndürür DELETED.ProductID, DELETED.ProductPhotoID, sütun ve Producttablo. Bu kullanılan silinecek satırları belirlemek içinFROMyan tümce .

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table (
    ProductID int NOT NULL, 
    ProductName nvarchar(50)NOT NULL,
    ProductModelID int NOT NULL, 
    PhotoID int NOT NULL);

DELETE Production.ProductProductPhoto
OUTPUT DELETED.ProductID,
       p.Name,
       p.ProductModelID,
       DELETED.ProductPhotoID
    INTO @MyTableVar
FROM Production.ProductProductPhoto AS ph
JOIN Production.Product as p 
    ON ph.ProductID = p.ProductID 
    WHERE p.ProductModelID BETWEEN 120 and 130;

--Display the results of the table variable.
SELECT ProductID, ProductName, ProductModelID, PhotoID 
FROM @MyTableVar
ORDER BY ProductModelID;
GO