İngilizce dilinde oku

Aracılığıyla paylaş


DELETE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Warehouse in Microsoft FabricSQL veritabanında Microsoft Fabric

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ı

Sözdizimi

syntaxsql
-- 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   
}  
syntaxsql
-- 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 ] ) ]  
}  
syntaxsql
-- Syntax for Parallel Data Warehouse  
  
DELETE 
    [ FROM [database_name . [ schema ] . | schema. ] table_name ]   
    [ WHERE <search_condition> ]   
    [ OPTION ( <query_options> [ ,...n ]  ) ]  
[; ]  

Bağımsız değişken

WITH <common_table_expression>
DELETE deyimi kapsamında tanımlanan ve ortak tablo ifadesi olarak da bilinen geçici adlandırılmış sonuç kümesini belirtir. Sonuç kümesi bir SELECT deyiminden türetilir.

Ortak tablo ifadeleri SELECT, INSERT, UPDATE ve CREATE VIEW deyimleriyle 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. INSERT, UPDATE veya DELETE ile kullanılan TOP ifadesinde başvuruda bulunan satırlar herhangi bir sırada düzenlenmez. Daha fazla bilgi için bkz. TOP (Transact-SQL).

KAYNAK
DELETE anahtar sözcüğü ile hedef table_or_view_namearasında kullanılabilecek isteğe bağlı bir anahtar sözcük veya rowset_function_limited.

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 dahilindeki bir tablo değişkeni, DELETE deyiminde 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üncelleştirilebilir 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.

WITH (<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>
DELETE işleminin bir parçası olarak silinen satırları veya bunları temel alan ifadeleri 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).

FROM table_source
Ek bir FROM yan tümcesi belirtir. DELETE için bu Transact-SQL uzantısı, <table_source> verilerinin belirtilmesine ve ilk FROM yan tümcesindeki 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) .

NEREDE
Silinen satır sayısını sınırlamak için kullanılan koşulları belirtir. WHERE yan tümcesi sağlanmazsa, DELETE tablodan tüm satırları kaldırı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, silinecek satırları niteleyen WHERE search_condition yan tümcesi kullanan arama yapılan DELETE deyiminden daha doğru olabilir. Arama koşulu tek bir satırı benzersiz olarak tanımlamıyorsa, aranan DELETE deyimi birden çok 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).

AKDI
DELETE işleminin belirtilen imlecin geçerli konumunda gerçekleştirildiğini belirtir.

KÜRESEL
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.

OPTION (<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 DELETE'den daha hızlıdır ve daha az sistem ve işlem günlüğü 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 bkz. @@ROWCOUNT (Transact-SQL).

Hata İşleme

bir TRY...CATCH yapısında deyimini belirterek DELETE deyimi için hata işleme 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 deyimi ifade değerlendirmesi sırasında oluşan bir aritmetik hatayla (taşma, sıfıra bölme veya etki alanı hatası) karşılaştığında, Veritabanı Altyapısı bu hataları SET ARITHABORT AÇıK olarak işler. Toplu işleminin geri kalanı iptal edilir ve bir hata iletisi döndürülür.

Birlikte çalışabilirlik

Değiştirilen nesne bir tablo değişkeniyse DELETE, kullanıcı tanımlı bir işlevin 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 yan tümcesi, doğrudan veya dolaylı olarak, üzerinde tanımlanmış bir INSTEAD OF tetikleyicisi olan bir görünüme başvuran bir DELETE deyiminde belirtilemez. TETIKLEYICILER YERİNE hakkında daha fazla bilgi için bkz. CREATE TRIGGER (Transact-SQL).

Şu anda FROM yan tümcesi Microsoft Fabric'teki Ambar'daki DELETE deyiminde belirtilemez.

Sınırlamalar ve Kısıtlamalar

DELETEile TOP 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. Başka bir kilitleme yöntemi belirterek DELETE deyimi süresince bu varsayılan davranışı geçersiz kılmak için tablo ipuçları belirtebilirsiniz, ancak ipuçlarının yalnızca 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.

  • DELETE deyiminde TABLOCK 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.

Not

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.

Günlüğe Kaydetme Davranışı

DELETE deyimi her zaman tam olarak günlüğe kaydedilir.

Güvenlik

İzinler

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

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

Örnekler

Kategori Öne çıkan söz dizimi öğeleri
Temel söz dizimi SİLMEK
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
DELETE deyiminin sonuçlarını yakalama OUTPUT yan tümcesi

Temel Söz Dizimi

Bu bölümdeki örnekler, gereken en düşük söz dizimini kullanarak DELETE deyiminin temel işlevselliğini gösterir.

A. DELETE'i WHERE yan tümcesi olmadan kullanma

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

SQL
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 AdventureWorks2022 veritabanındaki ProductCostHistory tablosundan StandardCost sütunundaki değerin 1000.00'den fazla olduğu tüm satırları siler.

SQL
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, silinen satır sayısını döndürmek için @@ROWCOUNT işlevindeki değeri de yazdırır.

SQL
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, complex_cursoradlı bir imleç kullanarak AdventureWorks2022 veritabanındaki EmployeePayHistory tablosundan tek bir satırı siler. Silme işlemi, imleçten şu anda getirilen tek satırı etkiler.

SQL
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 AdventureWorks2022 veritabanındaki SalesPersonQuotaHistory tablosundaki satırlar, SalesPerson tablosunda depolanan yıllık satışlara 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
-- SQL-2003 Standard subquery  
  
DELETE FROM Sales.SalesPersonQuotaHistory   
WHERE BusinessEntityID IN   
    (SELECT BusinessEntityID   
     FROM Sales.SalesPerson   
     WHERE SalesYTD > 2500000.00);  
GO  
SQL
-- 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  
SQL
-- 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

DELETE ile top (n) yan tümcesi kullanıldığında, silme işlemi n satır sayısı rastgele seçiminde gerçekleştirilir. Aşağıdaki örnek, AdventureWorks2022 veritabanındaki PurchaseOrderDetail tablosundan son tarihleri 1 Temmuz 2006'dan önceki 20 rastgele satırları siler.

SQL
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.

SQL
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.

SQL
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  
SQL
-- 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.

SQL
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.

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

DELETE deyiminin sonuçlarını yakalama

Ben. OUTPUT yan tümcesiyle DELETE kullanma

Aşağıdaki örnekte, bir DELETE deyiminin sonuçlarını AdventureWorks2022 veritabanındaki bir tablo değişkenine kaydetme gösterilmektedir.

SQL
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. DELETE deyiminde <from_table_name> ile OUTPUT kullanma

Aşağıdaki örnek, DELETE deyiminin FROM yan tümcesinde tanımlanan arama ölçütlerine göre AdventureWorks2022 veritabanındaki ProductProductPhoto tablosundaki satırları 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.

SQL
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.

SQL
DELETE FROM Table1;  

L. Tablodan satır kümesini SILME

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

SQL
DELETE FROM Table1  
WHERE StandardCost > 1000.00;  

M. DELETE deyimiyle LABEL kullanma

Aşağıdaki örnekte DELETE deyimiyle bir etiket kullanılır.

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

N. DELETE deyimiyle etiket ve sorgu ipucu kullanma

Bu sorgu, DELETE deyimiyle sorgu birleştirme ipucu kullanmaya yönelik temel söz dizimini 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).

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.

SQL
DELETE tableA WHERE EXISTS (
SELECT TOP 1 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.

SQL
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)
SELECT (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
UPDATE (Transact-SQL)
WITH common_table_expression (Transact-SQL)
@@ROWCOUNT (Transact-SQL)