128 votes

Comment supprimer les 1000 premières lignes d'une table à l'aide de Sql Server 2008 ?

J'ai une table dans SQL Server. Je voudrais en supprimer les 1000 premières lignes. Cependant, j'ai essayé ceci, mais au lieu de simplement supprimer les 1000 premières lignes, j'ai supprimé toutes les lignes du tableau.

Voici le code :

 delete from [mytab] 
select top 1000 
a1,a2,a3
from [mytab]

224voto

Martin Smith Points 174101

Le code que vous avez essayé est en fait deux déclarations. Un DELETE suivi d'un SELECT .

Vous ne définissez pas TOP comme ordonné par quoi.

Pour un critère de commande spécifique, la suppression d'un CTE ou d'une expression de table similaire est le moyen le plus efficace.

 ;WITH CTE AS
(
SELECT TOP 1000 *
FROM [mytab]
ORDER BY a1
)
DELETE FROM CTE

102voto

Oleg Dok Points 12155

Peut-être mieux pour sql2005+ à utiliser :

 DELETE TOP (1000)
FROM [MyTab]
WHERE YourConditions

Pour Sql2000 :

 DELETE FROM [MyTab]
WHERE YourIdField IN 
(
  SELECT TOP 1000 
    YourIdField 
  FROM [MyTab]
  WHERE YourConditions
)

MAIS

Si vous souhaitez supprimer un sous-ensemble spécifique de lignes au lieu d'un sous-ensemble arbitraire, vous devez spécifier explicitement l'ordre de sous-requête :

 DELETE FROM [MyTab]
WHERE YourIdField IN 
(
  SELECT TOP 1000 
    YourIdField 
  FROM [MyTab]
  WHERE YourConditions
  ORDER BY ExplicitSortOrder
)

Merci à tp @gbn d'avoir mentionné et demandé la réponse la plus claire et la plus exacte.

28voto

Rishi Bhatnagar Points 443

Comme défini dans le lien ci-dessous, vous pouvez supprimer de manière simple

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

http://technet.microsoft.com/en-us/library/ms175486(v=sql.105).aspx

8voto

Jason Dam Points 338
delete from [mytab]
where [mytab].primarykeyid in
(
select top 1000 primarykeyid
from [mytab]
)

3voto

Hamed elahi Points 31

C'est rapide. Essayez-le :

 DELETE FROM YourTABLE
FROM (SELECT TOP XX PK FROM YourTABLE) tbl
WHERE YourTABLE.PK = tbl.PK

Remplacer YourTABLE par le nom de la table, XX par un nombre, par exemple 1000, pk est le nom du champ de clé primaire de votre table.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X