DELETE (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Warehouse di Microsoft Fabric

Menghapus satu atau beberapa baris dari tabel atau tampilan di SQL Server.

Konvensi sintaks transact-SQL

Sintaksis

-- 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 ]  ) ]  
[; ]  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

WITH <common_table_expression>
Menentukan kumpulan hasil bernama sementara, juga dikenal sebagai ekspresi tabel umum, yang ditentukan dalam cakupan pernyataan DELETE. Kumpulan hasil berasal dari pernyataan SELECT.

Ekspresi tabel umum juga dapat digunakan dengan pernyataan SELECT, INSERT, UPDATE, dan CREATE VIEW. Untuk informasi selengkapnya, lihat WITH common_table_expression (Transact-SQL).

TOP (ekspresi) [ PERCENT ]
Menentukan jumlah atau persentase baris acak yang akan dihapus. ekspresi dapat berupa angka atau persentase baris. Baris yang direferensikan dalam ekspresi TOP yang digunakan dengan INSERT, UPDATE, atau DELETE tidak diatur dalam urutan apa pun. Untuk informasi selengkapnya, lihat TOP (Transact-SQL).

DARI
Kata kunci opsional yang dapat digunakan antara kata kunci DELETE dan table_or_view_name target, atau rowset_function_limited.

table_alias
Alias yang ditentukan dalam klausa FROM table_source yang mewakili tabel atau tampilan tempat baris akan dihapus.

server_name
Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

Nama server (menggunakan nama server tertaut atau fungsi OPENDATASOURCE sebagai nama server) tempat tabel atau tampilan berada. Jika server_name ditentukan, database_name dan schema_name diperlukan.

database_name
Nama database.

schema_name
Nama skema tempat tabel atau tampilan berada.

table_or_view_name
Nama tabel atau tampilan tempat baris akan dihapus.

Variabel tabel, dalam cakupannya, juga dapat digunakan sebagai sumber tabel dalam pernyataan DELETE.

Tampilan yang dirujuk oleh table_or_view_name harus dapat diperbarui dan mereferensikan tepat satu tabel dasar dalam klausa FROM dari definisi tampilan. Untuk informasi selengkapnya tentang tampilan yang dapat diperbarui, lihat CREATE VIEW (Transact-SQL).

rowset_function_limited
Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

Baik fungsi OPENQUERY atau OPENROWSET, tunduk pada kemampuan penyedia.

DENGAN (<table_hint_limited> [... n] )
Menentukan satu atau beberapa petunjuk tabel yang diizinkan untuk tabel target. Kata kunci WITH dan tanda kurung diperlukan. NOLOCK dan READUNCOMMITTED tidak diperbolehkan. Untuk informasi selengkapnya tentang petunjuk tabel, lihat Petunjuk Tabel (Transact-SQL).

<OUTPUT_Clause>
Mengembalikan baris yang dihapus, atau ekspresi berdasarkan baris tersebut, sebagai bagian dari operasi DELETE. Klausa OUTPUT tidak didukung dalam pernyataan DML apa pun yang menargetkan tampilan atau tabel jarak jauh. Untuk informasi selengkapnya tentang argumen dan perilaku klausa ini, lihat Klausul OUTPUT (Transact-SQL).

DARI table_source
Menentukan klausa FROM tambahan. Ekstensi Transact-SQL ke DELETE ini memungkinkan menentukan data dari <table_source> dan menghapus baris yang sesuai dari tabel dalam klausa FROM pertama.

Ekstensi ini, menentukan gabungan, dapat digunakan alih-alih subkueri dalam klausul WHERE untuk mengidentifikasi baris yang akan dihapus.

Untuk informasi selengkapnya, lihat FROM (Transact-SQL).

WHERE
Menentukan kondisi yang digunakan untuk membatasi jumlah baris yang dihapus. Jika klausa WHERE tidak disediakan, DELETE akan menghapus semua baris dari tabel.

Ada dua bentuk operasi penghapusan berdasarkan apa yang ditentukan dalam klausa WHERE:

  • Penghapusan yang dicari menentukan kondisi pencarian untuk memenuhi syarat baris yang akan dihapus. Misalnya, nilai WHERE column_name = .

  • Penghapusan yang diposisikan menggunakan klausa CURRENT OF untuk menentukan kursor. Operasi penghapusan terjadi pada posisi kursor saat ini. Ini bisa lebih akurat daripada pernyataan DELETE yang dicari yang menggunakan klausa WHERE search_condition untuk memenuhi syarat baris yang akan dihapus. Pernyataan DELETE yang dicari menghapus beberapa baris jika kondisi pencarian tidak secara unik mengidentifikasi satu baris.

<search_condition>
Menentukan kondisi pembatasan untuk baris yang akan dihapus. Tidak ada batasan jumlah predikat yang dapat disertakan dalam kondisi pencarian. Untuk informasi selengkapnya, lihat Kondisi Pencarian (Transact-SQL).

SAAT INI DARI
Menentukan bahwa DELETE dilakukan pada posisi kursor yang ditentukan saat ini.

GLOBAL
Menentukan bahwa cursor_name mengacu pada kursor global.

cursor_name
Adalah nama kursor terbuka tempat pengambilan dibuat. Jika kursor global dan lokal dengan nama cursor_name ada, argumen ini mengacu pada kursor global jika GLOBAL ditentukan; jika tidak, itu mengacu pada kursor lokal. Kursor harus memperbolehkan pembaruan.

cursor_variable_name
Nama variabel kursor. Variabel kursor harus mereferensikan kursor yang memungkinkan pembaruan.

OPTION (<query_hint> [ , ...n] )
Kata kunci yang menunjukkan petunjuk pengoptimal mana yang digunakan untuk menyesuaikan cara Mesin Database memproses pernyataan. Untuk informasi selengkapnya, lihat Petunjuk Kueri (Transact-SQL).

Praktik Terbaik

Untuk menghapus semua baris dalam tabel, gunakan TRUNCATE TABLE. TRUNCATE TABLE lebih cepat daripada DELETE dan menggunakan lebih sedikit sistem dan sumber daya log transaksi. TRUNCATE TABLE memiliki batasan, misalnya, tabel tidak dapat berpartisipasi dalam replikasi. Untuk informasi selengkapnya, lihat TRUNCATE TABLE (Transact-SQL)

@@ROWCOUNT Gunakan fungsi untuk mengembalikan jumlah baris yang dihapus ke aplikasi klien. Untuk informasi selengkapnya, lihat @@ROWCOUNT (Transact-SQL).

Penanganan Kesalahan

Anda dapat menerapkan penanganan kesalahan untuk pernyataan DELETE dengan menentukan pernyataan dalam TRY...CATCH konstruksi.

Pernyataan DELETE mungkin gagal jika melanggar pemicu atau mencoba menghapus baris yang direferensikan oleh data dalam tabel lain dengan FOREIGN KEY batasan. DELETE Jika menghapus beberapa baris, dan salah satu baris yang dihapus melanggar pemicu atau batasan, pernyataan dibatalkan, kesalahan dikembalikan, dan tidak ada baris yang dihapus.

Ketika pernyataan DELETE mengalami kesalahan aritmatika (luapan, bagi dengan nol, atau kesalahan domain) yang terjadi selama evaluasi ekspresi, Mesin Database menangani kesalahan ini seolah-olah SET ARITHABORT diatur AKTIF. Sisa batch dibatalkan, dan pesan kesalahan dikembalikan.

Interoperabilitas

DELETE dapat digunakan dalam isi fungsi yang ditentukan pengguna jika objek yang dimodifikasi adalah variabel tabel.

Saat Anda menghapus baris yang berisi kolom FILESTREAM, Anda juga menghapus file sistem file yang mendasar. File yang mendasar dihapus oleh pengumpul sampah FILESTREAM. Untuk informasi selengkapnya, lihat Mengakses Data FILESTREAM dengan Transact-SQL.

Klausa FROM tidak dapat ditentukan dalam pernyataan DELETE yang mereferensikan, baik secara langsung atau tidak langsung, tampilan dengan pemicu yang INSTEAD OF ditentukan di dalamnya. Untuk informasi selengkapnya tentang ALIH-ALIH pemicu, lihat MEMBUAT PEMICU (Transact-SQL).

Saat ini, klausa FROM tidak dapat ditentukan dalam pernyataan DELETE pada Gudang di Microsoft Fabric.

Batasan dan Pembatasan

Ketika TOP digunakan dengan DELETE, baris yang dirujuk tidak diatur dalam urutan apa pun dan ORDER BY klausul tidak dapat ditentukan secara langsung dalam pernyataan ini. Jika Anda perlu menggunakan TOP untuk menghapus baris dalam urutan kronologis yang bermakna, Anda harus menggunakan TOP bersama dengan ORDER BY klausul dalam pernyataan subpilih. Lihat bagian Contoh yang mengikuti topik ini.

TOP tidak dapat digunakan dalam DELETE pernyataan terhadap tampilan yang dipartisi.

Perilaku Penguncian

Secara default, DELETE pernyataan selalu memperoleh kunci eksklusif niat (IX) pada objek tabel dan halaman yang dimodifikasi, kunci eksklusif (X) pada baris yang dimodifikasinya, dan menahan kunci tersebut sampai transaksi selesai.

Dengan kunci eksklusif niat (IX), tidak ada transaksi lain yang dapat memodifikasi kumpulan data yang sama; operasi baca hanya dapat berlangsung dengan penggunaan petunjuk NOLOCK atau membaca tingkat isolasi yang tidak dilakukan. Anda dapat menentukan petunjuk tabel untuk mengambil alih perilaku default ini selama durasi pernyataan DELETE dengan menentukan metode penguncian lain, namun, kami menyarankan agar petunjuk hanya digunakan sebagai upaya terakhir oleh pengembang dan administrator database yang berpengalaman. Untuk informasi selengkapnya, lihat Petunjuk Tabel (Transact-SQL).

Ketika baris dihapus dari timbunan, Mesin Database dapat menggunakan penguncian baris atau halaman untuk operasi. Akibatnya, halaman yang dibuat kosong oleh operasi penghapusan tetap dialokasikan ke timbunan. Ketika halaman kosong tidak dibatalkan alokasinya, ruang terkait tidak dapat digunakan kembali oleh objek lain dalam database.

Untuk menghapus baris dalam tumpukan dan membatalkan alokasi halaman, gunakan salah satu metode berikut.

  • Tentukan petunjuk TABLOCK dalam pernyataan DELETE. Menggunakan petunjuk TABLOCK menyebabkan operasi penghapusan mengambil kunci IX pada objek alih-alih kunci baris atau halaman. Ini memungkinkan halaman untuk dibatalkan alokasinya. Untuk informasi selengkapnya tentang petunjuk TABLOCK, lihat Petunjuk Tabel (Transact-SQL).

  • Gunakan TRUNCATE TABLE jika semua baris akan dihapus dari tabel.

  • Buat indeks berkluster pada timbunan sebelum menghapus baris. Anda dapat menghilangkan indeks berkluster setelah baris dihapus. Metode ini lebih memakan waktu daripada metode sebelumnya dan menggunakan lebih banyak sumber daya sementara.

Catatan

Halaman kosong dapat dihapus dari tumpukan kapan saja dengan menggunakan ALTER TABLE <table_name> REBUILD pernyataan .

Perilaku Pengelogan

Pernyataan DELETE selalu dicatat sepenuhnya.

Keamanan

Izin

DELETE izin diperlukan pada tabel target. SELECT izin juga diperlukan jika pernyataan berisi klausa WHERE.

Izin DELETE default untuk anggota sysadmin peran server tetap, db_owner peran database tetap, dan db_datawriter pemilik tabel. Anggota sysadmin, db_owner, dan db_securityadmin peran, dan pemilik tabel dapat mentransfer izin ke pengguna lain.

Contoh

Category Elemen sintaksis unggulan
Sintaks dasar DELETE
Membatasi baris yang dihapus WHERE * FROM * cursor *
Menghapus baris dari tabel jarak jauh Server tertaut * Fungsi set baris OPENQUERY * Fungsi set baris OPENDATASOURCE
Menangkap hasil pernyataan DELETE Klausa OUTPUT

Sintaks dasar

Contoh di bagian ini menunjukkan fungsionalitas dasar pernyataan DELETE menggunakan sintaks minimum yang diperlukan.

J. Menggunakan DELETE tanpa klausa WHERE

Contoh berikut menghapus semua baris dari SalesPersonQuotaHistory tabel dalam database AdventureWorks2022 karena klausa WHERE tidak digunakan untuk membatasi jumlah baris yang dihapus.

DELETE FROM Sales.SalesPersonQuotaHistory;  
GO  

Membatasi Baris Yang Dihapus

Contoh di bagian ini menunjukkan cara membatasi jumlah baris yang akan dihapus.

B. Menggunakan klausa WHERE untuk menghapus sekumpulan baris

Contoh berikut menghapus semua baris dari ProductCostHistory tabel dalam database AdventureWorks2022 di mana nilai dalam StandardCost kolom lebih dari 1000.00.

DELETE FROM Production.ProductCostHistory  
WHERE StandardCost > 1000.00;  
GO  

Contoh berikut menunjukkan klausa WHERE yang lebih kompleks. Klausa WHERE menentukan dua kondisi yang harus dipenuhi untuk menentukan baris yang akan dihapus. Nilai dalam StandardCost kolom harus antara 12.00 dan 14.00 dan nilai dalam kolom SellEndDate harus null. Contoh ini juga mencetak nilai dari fungsi @@ROWCOUNT untuk mengembalikan jumlah baris yang dihapus.

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. Menggunakan kursor untuk menentukan baris yang akan dihapus

Contoh berikut menghapus satu baris dari EmployeePayHistory tabel dalam database AdventureWorks2022 menggunakan kursor bernama complex_cursor. Operasi penghapusan hanya memengaruhi satu baris yang saat ini diambil dari kursor.

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. Menggunakan gabungan dan subkueri ke data dalam satu tabel untuk menghapus baris di tabel lain

Contoh berikut menunjukkan dua cara untuk menghapus baris dalam satu tabel berdasarkan data di tabel lain. Dalam kedua contoh, baris dari SalesPersonQuotaHistory tabel dalam database AdventureWorks2022 dihapus berdasarkan penjualan tahun ke tanggal yang disimpan dalam SalesPerson tabel. Pernyataan pertama DELETE menunjukkan solusi subkueri yang kompatibel dengan ISO, dan pernyataan kedua DELETE menunjukkan ekstensi Transact-SQL FROM untuk bergabung dengan dua tabel.

-- 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. Menggunakan TOP untuk membatasi jumlah baris yang dihapus

Ketika klausa TOP (n) digunakan dengan DELETE, operasi penghapusan dilakukan pada pilihan acak n jumlah baris. Contoh berikut menghapus 20 baris acak dari PurchaseOrderDetail tabel dalam database AdventureWorks2022 yang memiliki tanggal jatuh tempo yang lebih awal dari 1 Juli 2006.

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

Jika Anda harus menggunakan TOP untuk menghapus baris dalam urutan kronologis yang bermakna, Anda harus menggunakan TOP bersama dengan ORDER BY dalam pernyataan subpilih. Kueri berikut menghapus 10 baris PurchaseOrderDetail tabel yang memiliki tanggal jatuh tempo paling awal. Untuk memastikan bahwa hanya 10 baris yang dihapus, kolom yang ditentukan dalam pernyataan subpilih (PurchaseOrderID) adalah kunci utama tabel. Menggunakan kolom non-kunci dalam pernyataan subpilih dapat mengakibatkan penghapusan lebih dari 10 baris jika kolom yang ditentukan berisi nilai duplikat.

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

Menghapus Baris Dari Tabel Jarak Jauh

Contoh di bagian ini menunjukkan cara menghapus baris dari tabel jarak jauh dengan menggunakan server tertaut atau fungsi set baris untuk mereferensikan tabel jarak jauh. Tabel jarak jauh ada di server atau instans SQL Server yang berbeda.

Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

F. Menghapus data dari tabel jarak jauh dengan menggunakan server tertaut

Contoh berikut menghapus baris dari tabel jarak jauh. Contoh dimulai dengan membuat tautan ke sumber data jarak jauh dengan menggunakan sp_addlinkedserver. Nama server tertaut, MyLinkServer, kemudian ditentukan sebagai bagian dari nama objek empat bagian dalam form server.catalog.schema.object.

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. Menghapus data dari tabel jarak jauh dengan menggunakan fungsi OPENQUERY

Contoh berikut menghapus baris dari tabel jarak jauh dengan menentukan fungsi set baris OPENQUERY . Nama server tertaut yang dibuat dalam contoh sebelumnya digunakan dalam contoh ini.

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

H. Menghapus data dari tabel jarak jauh dengan menggunakan fungsi OPENDATASOURCE

Contoh berikut menghapus baris dari tabel jarak jauh dengan menentukan fungsi set baris OPENDATASOURCE . Tentukan nama server yang valid untuk sumber data dengan menggunakan format server_name atau server_name\instance_name.

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

Menangkap hasil pernyataan DELETE

I. Menggunakan DELETE dengan klausa OUTPUT

Contoh berikut menunjukkan cara menyimpan hasil DELETE pernyataan ke variabel tabel dalam database AdventureWorks2022.

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. Menggunakan OUTPUT dengan <from_table_name> dalam pernyataan DELETE

Contoh berikut menghapus baris dalam ProductProductPhoto tabel dalam database AdventureWorks2022 berdasarkan kriteria pencarian yang ditentukan dalam FROM klausul DELETE pernyataan. Klausa OUTPUT mengembalikan kolom dari tabel yang sedang dihapus, DELETED.ProductID, DELETED.ProductPhotoID, dan kolom dari Product tabel. Ini digunakan dalam FROM klausul untuk menentukan baris yang akan dihapus.

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  

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

K. Menghapus semua baris dari tabel

Contoh berikut menghapus semua baris dari Table1 tabel karena klausa WHERE tidak digunakan untuk membatasi jumlah baris yang dihapus.

DELETE FROM Table1;  

L. MENGHAPUS sekumpulan baris dari tabel

Contoh berikut menghapus semua baris dari Table1 tabel yang memiliki nilai lebih besar dari 1000.00 di StandardCost kolom.

DELETE FROM Table1  
WHERE StandardCost > 1000.00;  

M. Menggunakan LABEL dengan pernyataan DELETE

Contoh berikut menggunakan label dengan pernyataan DELETE.

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

N. Menggunakan label dan petunjuk kueri dengan pernyataan DELETE

Kueri ini memperlihatkan sintaks dasar untuk menggunakan petunjuk gabungan kueri dengan pernyataan DELETE. Untuk informasi selengkapnya tentang petunjuk gabungan dan cara menggunakan klausa OPTION, lihat Klausa OPTION (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. Menghapus menggunakan klausa WHERE

Kueri ini memperlihatkan cara menghapus menggunakan klausa WHERE dan tidak menggunakan klausa FROM.

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

P. Hapus berdasarkan hasil bergabung dengan tabel lain

Contoh ini memperlihatkan cara menghapus dari tabel berdasarkan hasil dari bergabung dengan tabel lain.

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;  

Lihat Juga

BUAT PEMICU (Transact-SQL)
INSERT (Transact-SQL)
SELECT (Transact-SQL)
POTONG TABEL (Transact-SQL)
UPDATE (Transact-SQL)
DENGAN common_table_expression (T-SQL)
@@ROWCOUNT (T-SQL)