Solución:
El código que probó es de hecho dos declaraciones. A DELETE
seguido de un SELECT
.
Tu no defines TOP
según lo ordenado por qué.
Para un criterio de orden específico, eliminar de un CTE o una expresión de tabla similar es la forma más eficiente.
;WITH CTE AS
(
SELECT TOP 1000 *
FROM [mytab]
ORDER BY a1
)
DELETE FROM CTE
Puede ser mejor para sql2005 + usar:
DELETE TOP (1000)
FROM [MyTab]
WHERE YourConditions
Para Sql2000:
DELETE FROM [MyTab]
WHERE YourIdField IN
(
SELECT TOP 1000
YourIdField
FROM [MyTab]
WHERE YourConditions
)
PERO
Si quieres borrar específico subconjunto de filas en lugar de subconjunto arbitrario, debe especificar explícitamente el orden de la subconsulta:
DELETE FROM [MyTab]
WHERE YourIdField IN
(
SELECT TOP 1000
YourIdField
FROM [MyTab]
WHERE YourConditions
ORDER BY ExplicitSortOrder
)
Gracias tp @gbn por mencionar y exigir una respuesta más clara y exacta.
Como se define en el enlace a continuación, puede eliminar de manera sencilla
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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)