numero - ¿Cómo eliminar las 1000 filas superiores de una tabla con Sql Server 2008?
modificar valores de una tabla sql (6)
Tengo una tabla en SQL Server. Me gustaría borrar las 1000 filas superiores de él. Sin embargo, probé esto, pero en vez de simplemente eliminar las 1000 filas superiores, borré todas las filas de la tabla.
Aquí está el código:
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
Como se define en el siguiente enlace, puede eliminar de manera directa
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
El código que probó es, de hecho, dos declaraciones. A DELETE
seguido de un SELECT
.
No defines TOP
como ordenado por qué.
Para un criterio de ordenamiento específico, la eliminación 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
Es rápido. Intentalo:
DELETE FROM YourTABLE
FROM (SELECT TOP XX PK FROM YourTABLE) tbl
WHERE YourTABLE.PK = tbl.PK
Reemplace YourTABLE
por nombre de tabla, XX
por un número, por ejemplo 1000, pk
es el nombre del campo de clave principal de su tabla.
Puede ser mejor para sql2005 + para 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 desea eliminar un subconjunto específico de filas en lugar de un subconjunto arbitrario, debe especificar explícitamente el orden en 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 la respuesta más clara y exacta.
SET ROWCOUNT 1000;
DELETE FROM [MyTable] WHERE .....
delete from [mytab]
where [mytab].primarykeyid in
(
select top 1000 primarykeyid
from [mytab]
)