Delen via


DELETE (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Warehouse in Microsoft FabricSQL-database in Microsoft Fabric

Hiermee verwijdert u een of meer rijen uit een tabel of weergave in SQL Server.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

MET <common_table_expression>
Hiermee geeft u de tijdelijke benoemde resultatenset, ook wel bekend als algemene tabelexpressie, gedefinieerd binnen het bereik van de DELETE-instructie. De resultatenset is afgeleid van een SELECT-instructie.

Algemene tabelexpressies kunnen ook worden gebruikt met de instructies SELECT, INSERT, UPDATE en CREATE VIEW. Zie WITH common_table_expression (Transact-SQL)voor meer informatie.

TOP (expressie) [ PERCENT ]
Hiermee geeft u het aantal of het percentage willekeurige rijen op dat wordt verwijderd. expressie kan een getal of een percentage van de rijen zijn. De rijen waarnaar wordt verwezen in de TOP-expressie die wordt gebruikt met INSERT, UPDATE of DELETE, worden in geen enkele volgorde gerangschikt. Zie TOP (Transact-SQL)voor meer informatie.

VAN
Een optioneel trefwoord dat kan worden gebruikt tussen het trefwoord DELETE en het doel table_or_view_name, of rowset_function_limited.

table_alias
De alias die is opgegeven in de component FROM table_source die de tabel of weergave vertegenwoordigt waaruit de rijen moeten worden verwijderd.

server_name
van toepassing op: SQL Server 2008 (10.0.x) en hoger.

De naam van de server (met behulp van een gekoppelde servernaam of de OPENDATASOURCE- functie als servernaam) waarop de tabel of weergave zich bevindt. Als server_name is opgegeven, zijn database_name en schema_name vereist.

database_name
De naam van de database.

schema_name
De naam van het schema waartoe de tabel of weergave behoort.

table_or_view_name
De naam van de tabel of weergave waaruit de rijen moeten worden verwijderd.

Een tabelvariabele, binnen het bereik, kan ook worden gebruikt als een tabelbron in een DELETE-instructie.

De weergave waarnaar wordt verwezen door table_or_view_name moet kunnen worden bijgewerkt en precies één basistabel in de FROM-component van de weergavedefinitie verwijzen. Zie CREATE VIEW (Transact-SQL)voor meer informatie over bijwerkbare weergaven.

rowset_function_limited
van toepassing op: SQL Server 2008 (10.0.x) en hoger.

De OPENQUERY- of functie OPENROWSET, afhankelijk van providermogelijkheden.

WITH (<table_hint_limited> [... n] )
Hiermee geeft u een of meer tabelhints op die zijn toegestaan voor een doeltabel. Het sleutelwoord WITH en de haakjes zijn vereist. NOLOCK en READUNCOMMITTED zijn niet toegestaan. Zie tabelhints (Transact-SQL)voor meer informatie over tabelhints.

<OUTPUT_Clause>
Retourneert verwijderde rijen of expressies op basis van deze rijen als onderdeel van de DELETE-bewerking. De OUTPUT-component wordt niet ondersteund in DML-instructies die gericht zijn op weergaven of externe tabellen. Zie OUTPUT-component (Transact-SQL)voor meer informatie over de argumenten en het gedrag van deze component.

FROM table_source
Hiermee geeft u een extra FROM-component. Met deze Transact-SQL extensie voor DELETE kunt u gegevens uit <table_source> opgeven en de bijbehorende rijen uit de tabel in de eerste FROM-component verwijderen.

Deze extensie, die een join opgeeft, kan worden gebruikt in plaats van een subquery in de WHERE-component om rijen te identificeren die moeten worden verwijderd.

Zie FROM (Transact-SQL)voor meer informatie.

WAAR
Hiermee geeft u de voorwaarden op die worden gebruikt om het aantal rijen te beperken dat wordt verwijderd. Als er geen WHERE-component is opgegeven, verwijdert DELETE alle rijen uit de tabel.

Er zijn twee vormen van verwijderbewerkingen op basis van wat is opgegeven in de WHERE-component:

  • Doorzochte verwijderingen geven een zoekvoorwaarde op om de rijen te kwalificeren die moeten worden verwijderd. Bijvoorbeeld WHERE column_name = waarde.

  • Bij verwijderingen met positie wordt de HUIDIGE OF-component gebruikt om een cursor op te geven. De verwijderbewerking vindt plaats op de huidige positie van de cursor. Dit kan nauwkeuriger zijn dan een doorzochte DELETE-instructie die gebruikmaakt van een WHERE-search_condition-component om de rijen te kwalificeren die moeten worden verwijderd. Met een doorzochte DELETE-instructie worden meerdere rijen verwijderd als de zoekvoorwaarde niet uniek één rij identificeert.

<search_condition>
Hiermee geeft u de beperkingen op voor de rijen die moeten worden verwijderd. Er is geen limiet voor het aantal predicaten dat kan worden opgenomen in een zoekvoorwaarde. Zie zoekvoorwaarde (Transact-SQL)voor meer informatie.

HUIDIGE VAN
Hiermee geeft u op dat delete wordt uitgevoerd op de huidige positie van de opgegeven cursor.

GLOBAAL
Hiermee geeft u op dat cursor_name verwijst naar een globale cursor.

cursor_name
Is de naam van de geopende cursor waaruit het ophalen is gemaakt. Als zowel een globale als een lokale cursor met de naam cursor_name bestaat, verwijst dit argument naar de globale cursor als GLOBAL is opgegeven; anders verwijst deze naar de lokale cursor. De cursor moet updates toestaan.

cursor_variable_name
De naam van een cursorvariabele. De cursorvariabele moet verwijzen naar een cursor die updates toestaat.

OPTION (<query_hint> [ ,... n] )
Trefwoorden die aangeven welke optimizer-hints worden gebruikt om de manier aan te passen waarop de database-engine de instructie verwerkt. Zie queryhints (Transact-SQL)voor meer informatie.

Aanbevolen procedures

Als u alle rijen in een tabel wilt verwijderen, gebruikt u TRUNCATE TABLE. TRUNCATE TABLE is sneller dan DELETE en maakt gebruik van minder systeem- en transactielogboekbronnen. TRUNCATE TABLE beperkingen heeft, bijvoorbeeld, kan de tabel niet deelnemen aan replicatie. Zie TRUNCATE TABLE (Transact-SQL) voor meer informatie

Gebruik de functie @@ROWCOUNT om het aantal verwijderde rijen te retourneren aan de clienttoepassing. Zie @@ROWCOUNT (Transact-SQL)voor meer informatie.

Foutafhandeling

U kunt foutafhandeling voor de DELETE-instructie implementeren door de instructie op te geven in een TRY...CATCH constructie.

De DELETE-instructie kan mislukken als deze een trigger schendt of probeert een rij te verwijderen waarnaar wordt verwezen door gegevens in een andere tabel met een FOREIGN KEY beperking. Als de DELETE meerdere rijen verwijdert en een van de verwijderde rijen een trigger of beperking schendt, wordt de instructie geannuleerd, wordt er een fout geretourneerd en worden er geen rijen verwijderd.

Wanneer een DELETE-instructie een rekenkundige fout tegenkomt (overloop, delen door nul of een domeinfout) die optreedt tijdens de evaluatie van de expressie, verwerkt de database-engine deze fouten alsof SET ARITHABORT is ingesteld. De rest van de batch wordt geannuleerd en er wordt een foutbericht geretourneerd.

Interoperabiliteit

DELETE kan worden gebruikt in de hoofdtekst van een door de gebruiker gedefinieerde functie als het object een tabelvariabele is.

Wanneer u een rij verwijdert die een FILESTREAM-kolom bevat, verwijdert u ook de onderliggende bestandssysteembestanden. De onderliggende bestanden worden verwijderd door de FILESTREAM garbagecollection. Zie Access FILESTREAM Data met Transact-SQLvoor meer informatie.

De FROM-component kan niet worden opgegeven in een DELETE-instructie die rechtstreeks of indirect verwijst naar een weergave met een INSTEAD OF trigger die erop is gedefinieerd. Zie CREATE TRIGGER (Transact-SQL)voor meer informatie over IN PLAATS VAN triggers.

Momenteel kan de FROM-component niet worden opgegeven in een DELETE-instructie in Warehouse in Microsoft Fabric.

Beperkingen en beperkingen

Wanneer TOP wordt gebruikt met DELETE, worden de rijen waarnaar wordt verwezen niet in een willekeurige volgorde gerangschikt en kan de ORDER BY component niet rechtstreeks worden opgegeven in deze instructie. Als u TOP wilt gebruiken om rijen in een zinvolle chronologische volgorde te verwijderen, moet u TOP samen met een ORDER BY component in een subselectie-instructie gebruiken. Zie de sectie Voorbeelden die volgt in dit onderwerp.

TOP kan niet worden gebruikt in een DELETE instructie voor gepartitioneerde weergaven.

Vergrendelingsgedrag

Een DELETE-instructie verkrijgt standaard altijd een intentie-exclusieve (IX) vergrendeling op het tabelobject en pagina's die het wijzigt, een exclusieve (X) vergrendeling op de rijen die worden gewijzigd en houdt deze vergrendelingen vast totdat de transactie is voltooid.

Met een intentie exclusief (IX) vergrendelen, kunnen er geen andere transacties dezelfde set gegevens wijzigen; leesbewerkingen kunnen alleen plaatsvinden met het gebruik van de NOLOCK-hint of het niet-doorgevoerde isolatieniveau. U kunt tabelhints opgeven om dit standaardgedrag voor de duur van de DELETE-instructie te overschrijven door een andere vergrendelingsmethode op te geven. Het is echter raadzaam om hints alleen te gebruiken als laatste redmiddel door ervaren ontwikkelaars en databasebeheerders. Zie tabelhints (Transact-SQL)voor meer informatie.

Wanneer rijen uit een heap worden verwijderd, kan de database-engine rij- of paginavergrendeling gebruiken voor de bewerking. Als gevolg hiervan blijven de pagina's die door de verwijderbewerking zijn gemaakt, toegewezen aan de heap. Wanneer de toewijzing van lege pagina's niet ongedaan wordt gemaakt, kan de bijbehorende ruimte niet opnieuw worden gebruikt door andere objecten in de database.

Als u rijen in een heap wilt verwijderen en de toewijzing van pagina's ongedaan wilt maken, gebruikt u een van de volgende methoden.

  • Geef de TABLOCK hint op in de instructie DELETE. Door de TABLOCK hint te gebruiken, wordt de verwijderingsbewerking in plaats van een rij- of paginavergrendeling een IX-vergrendeling op het object geplaatst. Hierdoor kunnen de pagina's de toewijzing ongedaan worden gemaakt. Zie tabelhints (Transact-SQL)voor meer informatie over de TABLOCK hint.

  • Gebruik TRUNCATE TABLE als alle rijen uit de tabel moeten worden verwijderd.

  • Maak een geclusterde index op de heap voordat u de rijen verwijdert. U kunt de geclusterde index verwijderen nadat de rijen zijn verwijderd. Deze methode kost meer tijd dan de vorige methoden en maakt gebruik van meer tijdelijke resources.

Notitie

Lege pagina's kunnen op elk gewenst moment worden verwijderd uit een heap met behulp van de ALTER TABLE <table_name> REBUILD-instructie.

Als geoptimaliseerde vergrendeling is ingeschakeld, zijn er enkele aspecten van het vergrendelingsgedrag voor DELETE wijziging. Exclusieve (X) vergrendelingen worden bijvoorbeeld pas bewaard als de transactie is voltooid. Zie Geoptimaliseerde vergrendelingvoor meer informatie.

Gedrag van logboekregistratie

De DELETE-instructie wordt altijd volledig geregistreerd.

Veiligheid

Machtigingen

DELETE machtigingen zijn vereist voor de doeltabel. SELECT machtigingen zijn ook vereist als de instructie een WHERE-component bevat.

Delete-machtigingen zijn standaard ingesteld op leden van de sysadmin vaste serverrol, de db_owner en db_datawriter vaste databaserollen en de eigenaar van de tabel. Leden van de sysadmin, db_owneren de db_securityadmin rollen, en de eigenaar van de tabel kan machtigingen overdragen aan andere gebruikers.

Voorbeelden

Categorie Aanbevolen syntaxiselementen
basissyntaxis VERWIJDEREN
de verwijderde rijen beperken WHERE * FROM * cursor *
rijen verwijderen uit een externe tabel Gekoppelde server * functie OPENQUERY-rijset * functie OPENDATASOURCE-rijset
De resultaten van de DELETE-instructie vastleggen OUTPUT-component

Basissyntaxis

Voorbeelden in deze sectie laten de basisfunctionaliteit van de DELETE-instructie zien met behulp van de minimaal vereiste syntaxis.

Een. DELETE gebruiken zonder WHERE-component

In het volgende voorbeeld worden alle rijen uit de SalesPersonQuotaHistory tabel in de Database AdventureWorks2022 verwijderd omdat een WHERE-component niet wordt gebruikt om het aantal verwijderde rijen te beperken.

DELETE FROM Sales.SalesPersonQuotaHistory;  
GO  

De rijen die zijn verwijderd beperken

In deze sectie ziet u hoe u het aantal rijen kunt beperken dat wordt verwijderd.

B. De WHERE-component gebruiken om een set rijen te verwijderen

In het volgende voorbeeld worden alle rijen uit de ProductCostHistory tabel in de Database AdventureWorks2022 verwijderd waarin de waarde in de kolom StandardCost meer dan 1000.00is.

DELETE FROM Production.ProductCostHistory  
WHERE StandardCost > 1000.00;  
GO  

In het volgende voorbeeld ziet u een complexere WHERE-component. De WHERE-component definieert twee voorwaarden waaraan moet worden voldaan om de rijen te bepalen die moeten worden verwijderd. De waarde in de kolom StandardCost moet tussen 12.00 en 14.00 en de waarde in de kolom SellEndDate null zijn. In het voorbeeld wordt ook de waarde van de functie @@ROWCOUNT afgedrukt om het aantal verwijderde rijen te retourneren.

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. Een cursor gebruiken om de rij te bepalen die u wilt verwijderen

In het volgende voorbeeld wordt één rij uit de EmployeePayHistory tabel in de Database AdventureWorks2022 verwijderd met behulp van een cursor met de naam complex_cursor. De verwijderbewerking is alleen van invloed op de enkele rij die momenteel van de cursor is opgehaald.

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. Joins en subquery's gebruiken voor gegevens in de ene tabel om rijen in een andere tabel te verwijderen

In de volgende voorbeelden ziet u twee manieren om rijen in één tabel te verwijderen op basis van gegevens in een andere tabel. In beide voorbeelden worden rijen uit de SalesPersonQuotaHistory tabel in de Database AdventureWorks2022 verwijderd op basis van de omzet van het jaar tot heden die is opgeslagen in de tabel SalesPerson. In de eerste DELETE-instructie wordt de ISO-compatibele subquery-oplossing weergegeven. In de tweede DELETE-instructie ziet u de Transact-SQL FROM-extensie om de twee tabellen samen te voegen.

-- 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. Top gebruiken om het aantal verwijderde rijen te beperken

Wanneer een component TOP (n) wordt gebruikt met DELETE, wordt de verwijderbewerking uitgevoerd op een willekeurige selectie van n aantal rijen. In het volgende voorbeeld worden 20 willekeurige rijen verwijderd uit de tabel PurchaseOrderDetail in de Database AdventureWorks2022 met einddatums die ouder zijn dan 1 juli 2006.

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

Als u TOP moet gebruiken om rijen in een zinvolle chronologische volgorde te verwijderen, moet u TOP samen met ORDER BY gebruiken in een subselectie-instructie. Met de volgende query worden de 10 rijen van de PurchaseOrderDetail tabel verwijderd met de vroegste einddatums. Om ervoor te zorgen dat slechts 10 rijen worden verwijderd, is de kolom die is opgegeven in de subselectie-instructie (PurchaseOrderID) de primaire sleutel van de tabel. Als u een niet-sleutelkolom in de instructie subselectie gebruikt, kan dit leiden tot het verwijderen van meer dan 10 rijen als de opgegeven kolom dubbele waarden bevat.

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

Rijen verwijderen uit een externe tabel

Voorbeelden in deze sectie laten zien hoe u rijen uit een externe tabel verwijdert met behulp van een gekoppelde server of een rijsetfunctie om te verwijzen naar de externe tabel. Er bestaat een externe tabel op een andere server of een ander exemplaar van SQL Server.

van toepassing op: SQL Server 2008 (10.0.x) en hoger.

F. Gegevens uit een externe tabel verwijderen met behulp van een gekoppelde server

In het volgende voorbeeld worden rijen uit een externe tabel verwijderd. Het voorbeeld begint met het maken van een koppeling naar de externe gegevensbron met behulp van sp_addlinkedserver. De naam van de gekoppelde server, MyLinkServer, wordt vervolgens opgegeven als onderdeel van de naam van het vierdelige object in het formulier 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. Gegevens uit een externe tabel verwijderen met behulp van de functie OPENQUERY

In het volgende voorbeeld worden rijen uit een externe tabel verwijderd door de functie OPENQUERY rijsetfunctie op te geven. De naam van de gekoppelde server die in het vorige voorbeeld is gemaakt, wordt in dit voorbeeld gebruikt.

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

H. Gegevens uit een externe tabel verwijderen met behulp van de functie OPENDATASOURCE

In het volgende voorbeeld worden rijen uit een externe tabel verwijderd door de functie OPENDATASOURCE rijsetfunctie op te geven. Geef een geldige servernaam op voor de gegevensbron met behulp van de indeling server_name of server_name\instance_name.

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

De resultaten van de DELETE-instructie vastleggen

Ik. DELETE gebruiken met de OUTPUT-component

In het volgende voorbeeld ziet u hoe u de resultaten van een DELETE instructie opslaat in een tabelvariabele in de 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. UITVOER gebruiken met <from_table_name> in een DELETE-instructie

In het volgende voorbeeld worden rijen in de ProductProductPhoto tabel in de Database AdventureWorks2022 verwijderd op basis van zoekcriteria die zijn gedefinieerd in de FROM component van de DELETE-instructie. De OUTPUT component retourneert kolommen uit de tabel die wordt verwijderd, DELETED.ProductID, DELETED.ProductPhotoIDen kolommen uit de Product tabel. Dit wordt gebruikt in de FROM component om de rijen op te geven die moeten worden verwijderd.

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  

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

K. Alle rijen uit een tabel verwijderen

In het volgende voorbeeld worden alle rijen uit de Table1 tabel verwijderd omdat er geen WHERE-component wordt gebruikt om het aantal verwijderde rijen te beperken.

DELETE FROM Table1;  

L. Een set rijen uit een tabel verwijderen

In het volgende voorbeeld worden alle rijen uit de Table1 tabel verwijderd met een waarde die groter is dan 1000,00 in de kolom StandardCost.

DELETE FROM Table1  
WHERE StandardCost > 1000.00;  

M. LABEL gebruiken met een DELETE-instructie

In het volgende voorbeeld wordt een label met de DELETE-instructie gebruikt.

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

N. Een label en een queryhint gebruiken met de instructie DELETE

Deze query toont de basissyntaxis voor het gebruik van een hint voor querydeelname met de instructie DELETE. Zie OPTION-component (Transact-SQL)voor meer informatie over hints voor joins en het gebruik van de OPTION-component.

-- 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. Verwijderen met behulp van een WHERE-component

Deze query laat zien hoe u deze kunt verwijderen met behulp van een WHERE-component en niet met een FROM-component.

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

P. Verwijderen op basis van het resultaat van samenvoegen met een andere tabel

In dit voorbeeld ziet u hoe u een tabel verwijdert op basis van het resultaat van het samenvoegen met een andere tabel.

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;  

Zie ook

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)