DELETE (Transact-SQL)
Bir tablo veya Görünüm satır kaldırır.
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