DELETE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'te ambarMicrosoft Fabric'te SQL veritabanı

SQL Server'da bir tablo veya görünümden bir veya daha fazla satırı kaldırır.

Transact-SQL söz dizimi kuralları

Syntax

-- Syntax for SQL Server and Azure SQL Database  
  
[ WITH <common_table_expression> [ ,...n ] ]  
DELETE   
    [ TOP ( expression ) [ PERCENT ] ]   
    [ FROM ]   
    { { table_alias  
      | <object>   
      | rowset_function_limited   
      [ WITH ( table_hint_limited [ ...n ] ) ] }   
      | @table_variable  
    }  
    [ <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   
}  
-- Syntax for Azure Synapse Analytics and Microsoft Fabric

[ WITH <common_table_expression> [ ,...n ] ] 
DELETE [database_name . [ schema ] . | schema. ] table_name  
FROM [database_name . [ schema ] . | schema. ] table_name 
JOIN {<join_table_source>}[ ,...n ]  
ON <join_condition>
[ WHERE <search_condition> ]   
[ OPTION ( <query_options> [ ,...n ]  ) ]  
[; ]  

<join_table_source> ::=   
{  
    [ database_name . [ schema_name ] . | schema_name . ] table_or_view_name [ AS ] table_or_view_alias 
    [ <tablesample_clause>]  
    | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]  
}  
-- Syntax for Parallel Data Warehouse  
  
DELETE 
    [ FROM [database_name . [ schema ] . | schema. ] table_name ]   
    [ WHERE <search_condition> ]   
    [ OPTION ( <query_options> [ ,...n ]  ) ]  
[; ]  

Arguments

ILE <common_table_expression>
Geçici adlandırılmış sonuç kümesini, yani ortak tablo ifadesini belirtir; bu küme ifadenin DELETE kapsamında tanımlanır. Sonuç kümesi bir SELECT deyiminden türetilir.

Yaygın tablo ifadeleri SELECT, INSERT, UPDATE, ve CREATE VIEW ifadeleriyle de kullanılabilir. Daha fazla bilgi için bkz. WITH common_table_expression (Transact-SQL).

TOP (ifade) [ YÜZDE ]
Silinecek rastgele satırların sayısını veya yüzdesini belirtir. ifade bir sayı veya satırların yüzdesi olabilir. TOP ifadesinde INSERTUPDATE, , veya DELETE ile kullanılan sıralar herhangi bir sırayla düzenlenmemiştir. Daha fazla bilgi için bkz. TOP (Transact-SQL).

FROM
Anahtar kelime ile hedef table_or_view_name veya rowset_function_limited arasında DELETE kullanılabilen isteğe bağlı bir anahtar kelime.

table_alias
Satırların silindiği tabloyu veya görünümü temsil eden FROM table_source yan tümcesinde belirtilen diğer ad.

server_name
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.

Tablonun veya görünümün bulunduğu sunucunun adı (bağlı sunucu adı veya sunucu adı olarak OPENDATASOURCE işlevi). server_name belirtilirse database_name ve schema_name gerekir.

database_name
Veritabanının adı.

schema_name
Tablo veya görünümün ait olduğu şemanın adı.

table_or_view_name
Satırların kaldırılacağı tablonun veya görünümün adı.

Kapsamı içinde bir tablo değişkeni, bir DELETE ifadede tablo kaynağı olarak da kullanılabilir.

table_or_view_name tarafından başvuruda bulunılan görünümün güncelleştirilebilir olması ve görünüm tanımının FROM yan tümcesinde tam olarak bir temel tabloya başvurması gerekir. Güncellenebilir görünümler hakkında daha fazla bilgi için bkz.CREATE VIEW (Transact-SQL)

rowset_function_limited
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.

Sağlayıcı özelliklerine bağlı olarak OPENQUERY veya OPENROWSET işlevini.

(<table_hint_limited> [... n] )
Hedef tablo için izin verilen bir veya daha fazla tablo ipucunu belirtir. WITH anahtar sözcüğü ve parantezler gereklidir. NOLOCK ve READUNCOMMITTED'a izin verilmiyor. Tablo ipuçları hakkında daha fazla bilgi için bkz. Tablo İpuçları (Transact-SQL).

<OUTPUT_Clause>
İşlemin bir parçası olarak silinmiş satırlar veya onlara DELETE dayalı ifadeler döndürür. OUTPUT yan tümcesi, görünümleri veya uzak tabloları hedefleyen hiçbir DML deyiminde desteklenmez. Bu yan tümcenin bağımsız değişkenleri ve davranışı hakkında daha fazla bilgi için bkz. OUTPUT Yan Tümcesi (Transact-SQL).

table_source
Ek bir FROM yan tümcesi belirtir. Bu Transact-SQL uzantısı, DELETE table_source'den> veri <belirlemeye ve ilk FROM cümlesinde tablodan ilgili satırların silinmesine olanak tanır.

Kaldırılacak satırları tanımlamak için WHERE yan tümcesindeki bir alt sorgu yerine birleştirme belirten bu uzantı kullanılabilir.

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

WHERE
Silinen satır sayısını sınırlamak için kullanılan koşulları belirtir. Eğer bir WHERE maddesi sağlanmazsa, DELETE tablodaki tüm satırlar kaldırılır.

WHERE yan tümcesinde belirtilenlere bağlı olarak iki silme işlemi biçimi vardır:

  • Arama yapılan silmeler, silinecek satırları niteleme amacıyla bir arama koşulu belirtir. Örneğin WHERE column_name = değeri.

  • Konumlandırılan silme işlemleri, bir imleç belirtmek için CURRENT OF yan tümcesini kullanır. Silme işlemi imlecin geçerli konumunda gerçekleşir. Bu, siltilecek satırları nitelendirmek için WHERE search_condition maddesi kullanan aranan DELETE bir ifadeden daha doğru olabilir. Arama koşulu tek bir satırı benzersiz şekilde tanımlamıyorsa, aranan DELETE bir ifade birden fazla satırı siler.

<search_condition>
Silinecek satırların kısıtlayıcı koşullarını belirtir. Arama koşuluna dahil edilebilecek koşul sayısıyla ilgili bir sınır yoktur. Daha fazla bilgi için bkz. Arama Koşulu (Transact-SQL).

GÜNCEL
Belirtilen imlecin mevcut konumunda gerçekleştirildiğini DELETE belirtir.

GLOBAL
cursor_name genel bir imleç başvurduğunu belirtir.

cursor_name
Getirme işleminin yapıldığı açık imlecin adıdır. Hem genel hem de adı cursor_name olan yerel bir imleç varsa, genel imleç belirtilirse bu bağımsız değişken genel imleç anlamına gelir; aksi takdirde, yerel imleç anlamına gelir. İmleç güncelleştirmelere izin vermelidir.

cursor_variable_name
İmleç değişkeninin adı. İmleç değişkeni, güncelleştirmelere izin veren bir imleç başvurmalıdır.

SEÇENEK (<query_hint> [ ,... n] )
Veritabanı Altyapısı'nın deyimi işleme biçimini özelleştirmek için hangi iyileştirici ipuçlarının kullanıldığını gösteren anahtar sözcükler. Daha fazla bilgi için bkz. Sorgu İpuçları (Transact-SQL).

En İyi Yöntemler

Tablodaki tüm satırları silmek için TRUNCATE TABLEkullanın. TRUNCATE TABLE daha DELETE hızlıdır ve daha az sistem ve işlem kaydı kaynağı kullanır. TRUNCATE TABLE kısıtlamaları vardır; örneğin, tablo çoğaltmaya katılamaz. Daha fazla bilgi için bkz TRUNCATE TABLE . (Transact-SQL)

İstemci uygulamasına silinen satır sayısını döndürmek için @@ROWCOUNT işlevini kullanın. Daha fazla bilgi için @@ROWCOUNT (Transact-SQL) adresine bakınız.

Hata İşleme

Bir yapıda ifadeyi TRY...CATCH belirterek ifadenin hata işlemesini DELETE uygulayabilirsiniz.

DELETE deyimi tetikleyiciyi ihlal ederse veya FOREIGN KEY kısıtlaması olan başka bir tablodaki veriler tarafından başvuruda bulunan bir satırı kaldırmaya çalışırsa başarısız olabilir. DELETE birden çok satırı kaldırırsa ve kaldırılan satırlardan herhangi biri tetikleyiciyi veya kısıtlamayı ihlal ederse, deyim iptal edilir, bir hata döndürülür ve hiçbir satır kaldırılmaz.

Bir DELETE ifade değerlendirmesi sırasında bir aritmetik hata (taşma, sıfıra bölme veya alan hatası hatası yaşarsa), Database Engine bu hataları ON'da SET ARITHABORT ayarlanmış gibi yönetir. Toplu işleminin geri kalanı iptal edilir ve bir hata iletisi döndürülür.

Interoperability

DELETE değiştirilen nesne tablo değişkeni ise, kullanıcı tanımlı bir fonksiyonun gövdesinde kullanılabilir.

FILESTREAM sütunu içeren bir satırı sildiğinizde, temel alınan dosya sistemi dosyalarını da silersiniz. Temel alınan dosyalar FILESTREAM çöp toplayıcısı tarafından kaldırılır. Daha fazla bilgi için bkz. Transact-SQLile FILESTREAM Verilerine Erişme.

FROM cümlesi, üzerinde tetikleyici INSTEAD OF tanımlanmış bir görünüme doğrudan veya dolaylı olarak atıfta bulunan bir ifadede belirtilemezDELETE. INSTEAD OF tetikleyicileri hakkında daha fazla bilgi için (Transact-SQL) sayfasına bakınızCREATE TRIGGER.

Şu anda, FROM maddesi Microsoft Fabric'teki Warehouse hakkında bir DELETE açıklamada belirtilemez.

Sınırlamalar ve Kısıtlamalar

TOPile DELETE kullanıldığında, başvuruda bulunılan satırlar herhangi bir sırayla düzenlenmez ve ORDER BY yan tümcesi bu deyimde doğrudan belirtilmez. Satırları anlamlı bir kronolojik sırada silmek için TOP kullanmanız gerekiyorsa, TOP bir alt seçim deyimindeki ORDER BY yan tümcesiyle birlikte kullanmanız gerekir. Bu konu başlığında yer alan Örnekler bölümüne bakın.

TOP bölümlenmiş görünümlerde DELETE deyiminde kullanılamaz.

Kilitleme Davranışı

Varsayılan olarak, DELETE deyimi her zaman tablo nesnesine ve değiştirdiği sayfalara özel bir amaç (IX) kilidi, değiştirdiği satırlarda özel (X) kilidi alır ve işlem tamamlanana kadar bu kilitleri tutar.

Özel amaçlı (IX) kilit ile, başka hiçbir işlem aynı veri kümesini değiştiremez; okuma işlemleri yalnızca NOLOCK ipucunun kullanılmasıyla veya kaydedilmemiş yalıtım düzeyinin okunmasıyla gerçekleşebilir. Bu varsayılan davranışı geçersiz DELETE kılmak için başka bir kilitleme yöntemi belirterek bu varsayılan davranışı geçersiz kılmak için tablo ipuçları belirtebilirsiniz, ancak ipuçlarının deneyimli geliştiriciler ve veritabanı yöneticileri tarafından son çare olarak kullanılmasını öneririz. Daha fazla bilgi için bkz. Tablo İpuçları (Transact-SQL).

Bir yığından satırlar silindiğinde, Veritabanı Altyapısı işlem için satır veya sayfa kilitleme kullanabilir. Sonuç olarak, silme işlemi tarafından boş yapılan sayfalar yığına ayrılmış olarak kalır. Boş sayfalar serbest bırakılmadığında, ilişkili alan veritabanındaki diğer nesneler tarafından yeniden kullanılamaz.

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

  • TABLOCK deyiminde DELETE ipucunu belirtin. TABLOCK ipucunu kullanmak, silme işleminin satır veya sayfa kilidi yerine nesne üzerinde IX kilidi almasına neden olur. Bu, sayfaların serbest bırakılmasına olanak tanır. TABLOCK ipucu hakkında daha fazla bilgi için bkz. Tablo İpuçları (Transact-SQL).

  • Tüm satırlar tablodan silinecekse TRUNCATE TABLE kullanın.

  • Satırları silmeden önce yığında kümelenmiş bir dizin oluşturun. Satırlar silindikten sonra kümelenmiş dizini bırakabilirsiniz. Bu yöntem önceki yöntemlere göre daha fazla zaman alır ve daha fazla geçici kaynak kullanır.

Note

boş sayfalar, ALTER TABLE <table_name> REBUILD deyimi kullanılarak herhangi bir zamanda bir yığından kaldırılabilir.

İyileştirilmiş kilitleme etkinleştirilirse, DELETE için kilitleme davranışının bazı yönleri değişir. Örneğin, işlem tamamlanana kadar özel (X) kilitler tutulmaz. Daha fazla bilgi için bkz. İyileştirilmiş kilitleme.

Kayıt Davranışı

Bildirim DELETE her zaman tamamen kaydedilir.

Security

Permissions

hedef tabloda DELETE izinleri gereklidir. deyimi where yan tümcesi içeriyorsa SELECT izinleri de gereklidir.

DELETE Izinler, sabit sunucu rolünün üyelerine sysadmin , db_owner sabit veritabanı rollerine db_datawriter ve tablo sahibine varsayılan olarak aitti. sysadmin, db_ownerve db_securityadmin rollerinin üyeleri ve tablo sahibi izinleri diğer kullanıcılara aktarabilir.

Examples

Category Öne çıkan söz dizimi öğeleri
Temel sözdizimi DELETE
Silinen satırları sınırlama WHERE * FROM * imleç *
Uzak tablodaki satırları silme Bağlı sunucu * OPENQUERY satır kümesi işlevi * OPENDATASOURCE satır kümesi işlevi
Açıklamanın DELETE sonuçlarını yakalamak OUTPUT cümlesi

Temel Söz Dizimi

Bu bölümdeki örnekler, minimum gerekli sözdizimi kullanarak ifadenin DELETE temel işlevselliğini göstermektedir.

A. WHERE cümlesi olmadan kullanım DELETE

Aşağıdaki örnek, silinen satır sayısını sınırlamak için WHERE maddesi kullanılmadığı için AdventureWorks2025 veritabanındaki tüm satırları SalesPersonQuotaHistory siler.

DELETE FROM Sales.SalesPersonQuotaHistory;  
GO  

Silinen Satırları Sınırlama

Bu bölümdeki örneklerde, silinecek satır sayısının nasıl sınırlanacağı gösterilmektedir.

B. Bir satır kümesini silmek için WHERE yan tümcesini kullanma

Aşağıdaki örnek, AdventureWorks2025 veritabanındaki tablodaki tüm satırları ProductCostHistory siler; sütundaki StandardCost değer 'den fazla 1000.00.

DELETE FROM Production.ProductCostHistory  
WHERE StandardCost > 1000.00;  
GO  

Aşağıdaki örnekte daha karmaşık bir WHERE yan tümcesi gösterilmektedir. WHERE yan tümcesi, silinecek satırları belirlemek için karşılanması gereken iki koşulu tanımlar. StandardCost sütunundaki değer 12.00 ile 14.00 arasında olmalı ve SellEndDate sütundaki değer null olmalıdır. Örnek ayrıca @@ROWCOUNT fonksiyonundan değeri yazdırarak silinmiş satır sayısını döndürür.

DELETE Production.ProductCostHistory  
WHERE StandardCost BETWEEN 12.00 AND 14.00  
      AND EndDate IS NULL;  
PRINT 'Number of rows deleted is ' + CAST(@@ROWCOUNT as char(3));  

C. Silinecek satırı belirlemek için imleç kullanma

Aşağıdaki örnek, AdventureWorks2025 veritabanındaki tablodan tek bir satırı EmployeePayHistory . adlı bir imleç complex_cursorkullanarak siler. Silme işlemi, imleçten şu anda getirilen tek satırı etkiler.

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. Başka bir tablodaki satırları silmek için bir tablodaki verilere birleştirmeler ve alt sorgular kullanma

Aşağıdaki örneklerde, bir tablodaki satırları başka bir tablodaki verilere göre silmenin iki yolu gösterilmektedir. Her iki örnekte de, AdventureWorks2025 veritabanındaki tablodaki satırlar, SalesPersonQuotaHistory tabloda saklanan yıl başından buya satışlara SalesPerson göre silinir. İlk DELETE deyimi ISO uyumlu alt sorgu çözümünü, ikinci DELETE deyimi ise iki tabloyu birleştirmek için from uzantısını Transact-SQL gösterir.

-- SQL-2003 Standard subquery  
  
DELETE FROM Sales.SalesPersonQuotaHistory   
WHERE BusinessEntityID IN   
    (SELECT BusinessEntityID   
     FROM Sales.SalesPerson   
     WHERE SalesYTD > 2500000.00);  
GO  
-- Transact-SQL extension  
  
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  
-- No need to mention target table more than once.  
  
DELETE spqh  
  FROM  
        Sales.SalesPersonQuotaHistory AS spqh  
    INNER JOIN Sales.SalesPerson AS sp  
        ON spqh.BusinessEntityID = sp.BusinessEntityID  
  WHERE  sp.SalesYTD > 2500000.00;  

E. Silinen satır sayısını sınırlamak için TOP kullanma

Bir TOP (n) cümlesi ile DELETEkullanıldığında, silme işlemi n sayısı rastgele bir seçim üzerinde gerçekleştirilir. Aşağıdaki örnek, AdventureWorks2025 veritabanındaki rastgele satırlar ve son teslim tarihleri 1 Temmuz 2006'dan daha erken olan rastgele satırlar siler 20PurchaseOrderDetail .

DELETE TOP (20)   
FROM Purchasing.PurchaseOrderDetail  
WHERE DueDate < '20020701';  
GO  

Satırları anlamlı bir kronolojik sırada silmek için TOP kullanmanız gerekiyorsa, bir alt seçim deyiminde ORDER BY ile birlikte TOP kullanmanız gerekir. Aşağıdaki sorgu, PurchaseOrderDetail tablosunun en erken son tarihlere sahip 10 satırını siler. Yalnızca 10 satırın silindiğinden emin olmak için, alt seçim deyiminde (PurchaseOrderID) belirtilen sütun tablonun birincil anahtarıdır. Subselect deyiminde anahtar olmayan bir sütun kullanılması, belirtilen sütun yinelenen değerler içeriyorsa 10'dan fazla satırın silinmesine neden olabilir.

DELETE FROM Purchasing.PurchaseOrderDetail  
WHERE PurchaseOrderDetailID IN  
   (SELECT TOP 10 PurchaseOrderDetailID   
    FROM Purchasing.PurchaseOrderDetail   
    ORDER BY DueDate ASC);  
GO  

Uzak Tablodan Satır Silme

Bu bölümdeki örneklerde, uzak tabloya başvurmak için bağlı sunucu veya satır kümesi işlevi kullanarak uzak tablodaki satırları silme işlemi gösterilmektedir. Sql Server'ın farklı bir sunucusunda veya örneğinde bir uzak tablo var.

için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.

F. Bağlı sunucu kullanarak uzak tablodan veri silme

Aşağıdaki örnek, uzak bir tablodan satırları siler. Örnek, sp_addlinkedserverkullanarak uzak veri kaynağına bir bağlantı oluşturarak başlar. MyLinkServerbağlı sunucu adı, server.catalog.schema.object biçimindeki dört parçalı nesne adının bir parçası olarak belirtilir.

USE master;  
GO  
-- Create a link to the remote data source.   
-- Specify a valid server name for @datasrc as 'server_name' or 'server_name\instance_name'.  
  
EXEC sp_addlinkedserver @server = N'MyLinkServer',  
    @srvproduct = N' ',  
    @provider = N'SQLNCLI',   
    @datasrc = N'server_name',  
    @catalog = N'AdventureWorks2022';  
GO  
-- Specify the remote data source using a four-part name   
-- in the form linked_server.catalog.schema.object.  
  
DELETE MyLinkServer.AdventureWorks2022.HumanResources.Department 
WHERE DepartmentID > 16;  
GO  

G. OPENQUERY işlevini kullanarak uzak tablodan veri silme

Aşağıdaki örnek, OPENQUERY satır kümesi işlevini belirterek uzak bir tablodaki satırları siler. Önceki örnekte oluşturulan bağlı sunucu adı bu örnekte kullanılmıştır.

DELETE OPENQUERY (MyLinkServer, 'SELECT Name, GroupName 
FROM AdventureWorks2022.HumanResources.Department  
WHERE DepartmentID = 18');  
GO  

H. OPENDATASOURCE işlevini kullanarak uzak tablodan veri silme

Aşağıdaki örnek, OPENDATASOURCE satır kümesi işlevini belirterek uzak bir tablodan satırları siler. server_name veya server_name\instance_namebiçimini kullanarak veri kaynağı için geçerli bir sunucu adı belirtin.

DELETE FROM OPENDATASOURCE('SQLNCLI',  
    'Data Source= <server_name>; Integrated Security=SSPI')  
    .AdventureWorks2022.HumanResources.Department   
WHERE DepartmentID = 17;

Açıklamanın DELETE sonuçlarını yakalamak

I. OUTPUT cümlesi ile kullanım DELETE

Aşağıdaki örnek, bir DELETE ifadenin sonuçlarının AdventureWorks2025 veritabanındaki bir tablo değişkenine nasıl kaydedileceğini gösterir.

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  

J. Bir ifadede from_table_name>DELETE ile OUTPUT <kullanımı

Aşağıdaki örnek, ifadenin maddesinde ProductProductPhotoFROM tanımlanan arama kriterlerine göre AdventureWorks2025 veritabanındaki tablodaki satırları DELETE siler. OUTPUT yan tümcesi, silinen tablodaki sütunları, DELETED.ProductID, DELETED.ProductPhotoIDve Product tablosundaki sütunları döndürür. Bu, silinecek satırları belirtmek için FROM yan tümcesinde kullanılır.

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  

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

K. Tablodan tüm satırları silme

Aşağıdaki örnek, silinen satır sayısını sınırlamak için WHERE yan tümcesi kullanılmadığından Table1 tablosundaki tüm satırları siler.

DELETE FROM Table1;  

L. DELETE bir tablodan bir satır seti

Aşağıdaki örnek, Table1 sütununda 1000,00'den büyük bir değere sahip olan StandardCost tablosundaki tüm satırları siler.

DELETE FROM Table1  
WHERE StandardCost > 1000.00;  

M. LABEL ile bir DELETE ifade kullanımı

Aşağıdaki örnek, şu DELETE ifadeyle birlikte bir etiket kullanır.

DELETE FROM Table1  
OPTION ( LABEL = N'label1' );  
  

N. Bir etiket ve bir sorgu ipucu kullanarak bu DELETE ifadeyle

Bu sorgu, deyimiyle bir sorgu birleştirme ipucu kullanmaya yönelik temel söz dizimini DELETE gösterir. Birleştirme ipuçları ve OPTION yan tümcesini kullanma hakkında daha fazla bilgi için bkz. OPTION Yan Tümcesi (Transact-SQL).

-- Uses AdventureWorks  
  
DELETE FROM dbo.FactInternetSales  
WHERE ProductKey IN (   
    SELECT T1.ProductKey FROM dbo.DimProduct T1   
    JOIN dbo.DimProductSubcategory T2  
    ON T1.ProductSubcategoryKey = T2.ProductSubcategoryKey  
    WHERE T2.EnglishProductSubcategoryName = 'Road Bikes' )  
OPTION ( LABEL = N'CustomJoin', HASH JOIN ) ;  

O. WHERE yan tümcesi kullanarak silme

Bu sorgu, FROM yan tümcesi kullanmadan WHERE yan tümcesi kullanarak silmeyi gösterir.

DELETE tableA WHERE EXISTS (
SELECT TOP 1 FROM tableB tb WHERE tb.col1 = tableA.col1
)

P. Başka bir tabloyla birleştirmenin sonucuna göre silme

Bu örnekte, başka bir tabloyla birleştirme sonucuna bağlı olarak tablodan silme işlemi gösterilmektedir.

CREATE TABLE dbo.Table1   
    (ColA int NOT NULL, ColB decimal(10,3) NOT NULL);  
GO  

CREATE TABLE dbo.Table2   
    (ColA int PRIMARY KEY NOT NULL, ColB decimal(10,3) NOT NULL);  
GO  
INSERT INTO dbo.Table1 VALUES(1, 10.0), (1, 20.0);  
INSERT INTO dbo.Table2 VALUES(1, 0.0);  
GO  

DELETE dbo.Table2   
FROM dbo.Table2   
    INNER JOIN dbo.Table1   
    ON (dbo.Table2.ColA = dbo.Table1.ColA)
    WHERE dbo.Table2.ColA = 1;  

Ayrıca Bkz.

CREATE TRIGGER (Transact-SQL)
INSERT (Transact-SQL)
SEÇ (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
UPDATE (Transact-SQL)
WITH common_table_expression (Transact-SQL)
@@ROWCOUNT (Transact-SQL)