Tenho uma tabela no SQL Server. Eu gostaria de excluir as 1000 linhas principais dele. No entanto, tentei fazer isso, mas em vez de apenas excluir as 1000 linhas principais, excluí todas as linhas da tabela.
Aqui está o código:
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
sql
sql-server
sql-delete
Edgarmtze
fonte
fonte
delete from [mytab]
é uma instrução eselect top ...
é outra.Respostas:
O código que você tentou é, na verdade, duas instruções. A
DELETE
seguido por aSELECT
.Você não define
TOP
como ordenado por quê.Para um critério de pedido específico, a exclusão de uma CTE ou expressão de tabela semelhante é a maneira mais eficiente.
fonte
DELETE TOP (1000) FROM table ORDER BY column
, leia isto : "As linhas referenciadas na expressão TOP usada com INSERT, UPDATE, MERGE ou DELETE não estão organizadas em nenhuma ordem."WITH
reclamações evita reclamações de pessoas que não fizeram isso.Pode ser melhor para sql2005 + usar:
Para Sql2000:
MAS
Se quiser excluir um subconjunto específico de linhas em vez de um subconjunto arbitrário, você deve especificar explicitamente a ordem da subconsulta:
Obrigado a tp @gbn por mencionar e exigir uma resposta mais clara e exata.
fonte
Conforme definido no link abaixo, você pode excluir de maneira direta
http://technet.microsoft.com/en-us/library/ms175486(v=sql.105).aspx
fonte
fonte
fonte
Isso é rápido. Tente:
Substituir
YourTABLE
pelo nome da tabela,XX
por um número, por exemplo 1000,pk
é o nome do campo da chave primária da sua tabela.fonte