web-dev-qa-db-fra.com

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 supprimer les 1000 premières lignes de celui-ci. Cependant, j'ai essayé ceci, mais au lieu de simplement supprimer les 1000 premières lignes, toutes les lignes de la table ont été supprimées.

Voici le code:

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

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 classement spécifique, la suppression de l'expression CTE ou similaire est la méthode la plus efficace.

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

Peut-être mieux pour sql2005 + d’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 spécifique sous-ensemble de lignes au lieu d'un sous-ensemble arbitraire, vous devez spécifier explicitement l'ordre de la 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 exigé une réponse plus claire et plus précise.

77
Oleg Dok

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

24
Rishi Bhatnagar
delete from [mytab]
where [mytab].primarykeyid in
(
select top 1000 primarykeyid
from [mytab]
)
6
Jason Dam

C'est rapide. Essayez le:

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

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

2
Hamed elahi
SET ROWCOUNT 1000;

DELETE FROM [MyTable] WHERE .....
1
Joe Bourne