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]
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
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.
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
delete from [mytab]
where [mytab].primarykeyid in
(
select top 1000 primarykeyid
from [mytab]
)
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.
SET ROWCOUNT 1000;
DELETE FROM [MyTable] WHERE .....