SQLShack

Este artigo sobre a instrução SQL Delete faz parte da série SQL essencial sobre instruções-chave, funções e operações no SQL Server.

Para remover uma linha de uma tabela é realizada através de uma linguagem de manipulação de dados, também conhecida como instrução DML, utilizando a palavra-chave delete. A operação de apagar SQL é de longe a mais simples de todos os comandos DML. Ao executar o comando de apagar, não temos de nos preocupar em obter qualquer forma de dados da tabela, e não temos de nos preocupar em trabalhar com quaisquer dados que recuperamos da(s) tabela(s). Simplesmente dizemos à base de dados para apagar um registo específico, e ou o faz ou não o faz. É tão simples como isso.

  • Nota: Para saber mais sobre como usar a instrução SQL Delete, por favor leia The Best Ways to Use SQL Delete Statement in a SQL Table article.

Primeiro, vamos rever rapidamente o aspecto de uma instrução SQL Delete. Precisamos de dizer à base de dados e à tabela de onde deve apagar os dados. É uma boa ideia acrescentar uma cláusula de condição para definir o âmbito da eliminação dos dados. Caso contrário, apagará tudo o que se encontra na tabela.

Vamos dar uma vista de olhos à nossa tabela e remover alguns registos.

Como apagar linhas sem cláusula de condição

O exemplo seguinte apaga todas as linhas da pessoa. pessoa a tabela na base de dados AdventureWorks2014. Não há qualquer restrição imposta à declaração de eliminação SQL usando uma cláusula WHERE.

1
2
3

USE Adventureworks2014;
GO
DELETE DE .;

Como apagar linhas com a cláusula where

O exemplo seguinte apaga linhas do . na base de dados AdventureWorks2014 na qual o valor na coluna businessEntityID é superior a 30,000

USE Adventureworks2014;
GO
DELETE DE .
WHERE businessEntityID > 30000;

1
2
3
4

Nota: Um erro infeliz que pode ocorrer é executar acidentalmente uma exclusão SQL sem cláusula Where e apagar inadvertidamente todos os seus dados. Para evitar que isto aconteça, considere a utilização da funcionalidade Execution guard no ApexSQL Complete, para alertar contra tais acções potencialmente prejudiciais, antes de as executar. Saiba mais: Alertas de execução

Como apagar linhas usando a cláusula Topo com Onde

O exemplo seguinte apaga 50 linhas aleatórias da tabela Person.Person na base de dados AdventureWorks2014. O valor na BusinessEntityID deve situar-se entre 30.000 e 40,000

USE Adventureworks2014;
GO
DELETE TOP(50) FROM .
WHERE BusinessEntityID entre 30000 e 40000

1
2
3
4

Nota: Quando a cláusula TOP (n) é utilizada com a instrução SQL Delete e qualquer instrução DML (ou seja Select, Insert, Delete and Update), a operação é executada numa selecção aleatória de um número de linhas especificadas na cláusula Top.

Como apagar linhas duplicadas

No mundo real, tendemos a recolher dados de diferentes fontes; não é invulgar ter registos duplicados. Uma abordagem ao problema da duplicação é, em primeiro lugar, identificar onde ocorreram as duplicações. E executar uma consulta selectiva sobre essas colunas.

O exemplo seguinte utiliza o argumento PARTITION BY para dividir o resultado da consulta definido por todas as colunas da tabela tb_spaceused. O Row_Number (), uma função de janela, o que significa que funciona sobre um conjunto ordenado. A cláusula ORDER BY especificada na cláusula OVER ordena as linhas em cada partição por todas as colunas da tabela tb_spaceused.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

COM CTE
AS (SELECT *,
ROW_NUMBER() OVER(PARTITION BY database_name,
database_size,
,
reservado,
dados,
tamanho_do_índice,
não utilizado
ORDER BY database_name
) AS Row_Num
FROM tb_spaceused)
SELECT *
FROM CTE
WHERE Row_Num <> 1;

>p>

Substituir a declaração Select por um Delete remove todas as duplicações da tabela.

COM CTE
AS (SELECT *),
ROW_NUMBER() OVER(PARTITION BY database_name,
database_size,
,
reservado,
dados,
tamanho_do_índice,
não utilizado
ORDER BY database_name
) AS Row_Num
DE tb_spaceused)
–SELECT *
–FROM CTE
–WHERE Row_Num <> 1;
DELETE DE CTE
ONDE Row_Num <> 1;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

p>

Como apagar linhas usando a subconsultas

No exemplo seguinte, as linhas de uma tabela são eliminadas com base nos dados de outra tabela. Nos exemplos, as linhas da tabela SalesPersonQuotaHistory são eliminadas com base na coluna SalesYTD da tabela SalesPerson.

>

APAGAR DAS VENDAS.SalesPersonQuotaHistory
WHERE BusinessEntityID IN
(
SELECT BusinessEntityID
FROM Sales.SalesPerson
WHERE SalesYTD > 4900000.00
);
GO

1
2
3
4
5
6
7
8

Como apagar linhas usando Juntas SQL

Nesta secção, utilizaremos a instrução SQL Delete para apagar os dados da base de dados Adeventureworks2014. Apagar dados, à primeira vista, parece trivial, mas uma vez que entramos numa grande base de dados, as coisas podem já não ser as mesmas e fáceis.

Em muitos casos, as tabelas estão relacionadas através de uma relação de chave primária e estrangeira. No exemplo seguinte, podemos ver uma utilização de junções para apagar os dados do Sales.SalesPersonQuotaHistory.

1
2
3
4
5

DELETE sq
Das Vendas.SalesPersonQuotaHistory sq
INNER JOIN Sales.SalesPerson sp ON sq.BusinessEntityID = sp.BusinessEntityID
WHERE sp.SalesYTD > 4500000.00;
GO

/div>

Como apagar linhas de uma tabela remota utilizando servidores ligados e OpenQuery

O exemplo seguinte utiliza a instrução SQL delete para apagar linhas de uma tabela remota utilizando o servidor ligado chamado, hqdbt01. Em seguida, consultar a tabela remota usando quatro…convenção de nomenclatura de objectos para apagar as linhas da tabela remota

>>

DELETE
FROM .AdventureWorks2014…
WHERE ShiftID = 2;
1
2
3

O exemplo seguinte, a tabela remota é consultada especificando a função de conjunto de linhas OPENQUERY juntamente com o comando de apagar.

1
2
3

DELETE OPENQUERY (hqdbt01, ‘SELECT *
FROM AdventureWorks2014.HumanResources.Department
WHERE DepartmentID = 18′);

Como apagar linhas usando SSMS

Usando o SQL Server Management Studio (SSMS), Graphical User Interface (GUI) para apagar linhas envolve uma pesquisa manual. Na realidade, será muito mais fácil e mais rápido apagar registos com uma consulta SQL.

Vamos avançar e localizar a tabela para usar uma instrução de eliminação SQL, neste caso, a tabela dbo.cities é seleccionada. Agora, clique com o botão direito do rato e escolha Edit Top 200 filas. Esta opção abre uma janela do desenhador da consulta. Em seguida, clique com o botão direito do rato na janela e seleccione Executar SQL e escreva uma nova consulta que irá apagar linhas da tabela dbo.cities.

No painel de resultados, certifique-se de que SELECT Statement está a puxar para cima os registos alvo correctos antes de começar a apagar as linhas. Seleccione as linhas e clique com o botão direito do rato nas linhas e escolha Delete para remover as linhas da tabela.

Sumário

Até agora, temos visto muitas formas diferentes de utilizar a instrução SQL delete para remover dados. Mas, há uma lista da consideração a ser seguida durante a utilização da instrução de eliminação, e é a seguinte:

  1. É sempre recomendado começar com uma instrução SELECT antes de eliminar qualquer coisa para ter a certeza de que está a visar os registos correctos. Assim, a declaração de eliminação é utilizada para eliminar linhas de uma tabela utilizando a cláusula where para seleccionar apenas as linhas a eliminar
  2. Utilize sempre um identificador único para localizar as linhas a eliminar
  3. Para eliminar todas as linhas de uma tabela, utilize sempre a TABELA TRUNCATE. TRUNCATE TABLE que é mais rápido do que uma instrução de eliminação SQL e utiliza menos recursos de sistema e de registo de transacções
  4. Por defeito, as instruções DELETE induzem um bloqueio exclusivo (X) na tabela, e mantém o bloqueio até a transacção estar concluída
  5. Um bloqueio exclusivo impede que outra transacção modifique os dados; as operações de leitura são permitidas com a utilização da dica NOLOCK ou ler o nível de isolamento não comprometido
  6. Recomenda-se especificar a dica TABLOCK na instrução de eliminação. Este processo permite a desalocação de páginas e espaço associado disponível para reutilização por outros objectos na base de dados
  7. É uma boa prática criar um índice agrupado na tabela de pilha antes de executar uma declaração de eliminação
  8. Embora muito simples e muito poderoso, e o resultado de uma declaração de eliminação é destrutivo. As linhas eliminadas não podem ser facilmente recuperadas

Nota: Para recuperar linhas eliminadas ver SQL Server disaster recovery – How to quickly recover data lost due to an Inadvertent delete operation

That’s all for now… Espero que goste de ler este artigo sobre a instrução de eliminação SQL. Se tiver alguma dúvida, sinta-se à vontade para comentar abaixo.

  • Autor
  • Posts recentes
Sou um tecnólogo de bases de dados com mais de 11 anos de riqueza, experiência prática em tecnologias de bases de dados. Sou Microsoft Certified Professional e tenho o apoio de um Mestrado em Aplicações Informáticas.
A minha especialidade reside na concepção & implementação de soluções de alta disponibilidade e migração de DB Migration multiplataforma. As tecnologias actualmente em funcionamento são SQL Server, PowerShell, Oracle e MongoDB.
Ver todos os posts de Prashanth Jayaram

Latest posts de Prashanth Jayaram (ver todos)
ul>

  • Uma rápida visão geral da auditoria de bases de dados em SQL – 28 de Janeiro, 2021
  • Como configurar o Azure Data Sync entre as bases de dados Azure SQL e o SQL Server no local – 20 de Janeiro de 2021
  • Como realizar operações de importação/exportação de bases de dados Azure SQL usando PowerShell – 14 de Janeiro de 2021
  • Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *