Básicamente quiero hacer esto:favor explicar esto elimina la parte superior de sintaxis SQL 100
delete top(100) from table order by id asc
pero MS SQL no permite orden en esta posición
La solución común parece ser la siguiente:
DELETE table WHERE id IN(SELECT TOP (100) id FROM table ORDER BY id asc)
Pero también encontré este método here:
delete table from (select top (100) * from table order by id asc) table
que tiene un plan de ejecución mucho mejor estimado (74:26). Desafortunadamente, realmente no entiendo la sintaxis, por favor, ¿alguien puede explicarme?
Siempre interesado en otros métodos para lograr el mismo resultado también.
EDIT: Todavía no lo entiendo Tengo miedo, quiero poder leer la consulta mientras leo los dos primeros que son prácticamente ingleses. Las consultas anteriores para mí son:
delete the top 100 records from table, with the records ordered by id ascending
delete the top 100 records from table where id is anyone of (this lot of ids)
delete table from (this lot of records) table
No puedo cambiar el tercero en una frase Inglés lógica ... Creo que lo que estoy tratando de llegar es ¿Cómo funciona esto a su vez en "borrar de la tabla (Esta gran cantidad de registros) ". El 'desde' parece estar en una posición ilógica y la segunda mención de 'tabla' es lógicamente superflua (para mí).
No puedo coincidir con uno de sus 4 sintaxis con el tercer ejemplo, que dice a mí como "tabla Eliminar en la tabla subtabla". Por favor, mira mi edición de la pregunta. – Patrick
@Patrick: puede agregar el 'de' opcional a su consulta (la diferencia entre la 3ra y 4ta forma anterior) para que se lea más lógicamente. Ajusté los formularios de arriba para ser más descriptivo. – Guffa
@Patrick: la consulta podría describirse en inglés como "eliminar todos los registros de la tabla que coincidan con los registros (en este lote de registros se llama 'tabla')". Tenga en cuenta que la última "tabla" en la consulta es un alias, no el nombre real de la tabla. – Guffa