Posso usar o comando truncate com uma cláusula where? Eu preciso remover linhas específicas de várias tabelas.
Como posso excluir dados específicos de todo o banco de dados?
SELECT DimEmployee.[FirstName], DimEmployee.[LastName], [SalesOrderNumber], [ShipDateKey]
FROM DimEmployee
JOIN [FactResellerSales]
ON DimEmployee.[EmployeeKey] = [FactResellerSales].[ProductKey]
WHERE DimEmployee.[FirstName] like 'kevin%' <--have to truncate this specific name from entire DB
Existe algum outro método para remover dados específicos de todo o banco de dados?
No meu banco de dados existem 172 tabelas. Eu queria excluir um nome específico e suas colunas correspondentes de todo o banco de dados. O nome está espalhado por todo o banco de dados, portanto, quero removê-lo de uma só vez, em vez de ir para cada tabela e excluí-lo individualmente.
Não, Truncar não pode ser usado com uma
WHERE
cláusula. Truncar simplesmente desaloca todas as páginas pertencentes a uma tabela (ou partição) e seus índices.De BOL :
Se você está procurando uma maneira mais eficiente de excluir dados, eu começaria aqui .
Existem três métodos de exclusão no sql server:
Truncate
,Delete
,Drop
DROP, TRUNCATE são comandos DDL (DROP é usado para remover objetos como tabelas, colunas, restrições,... mas não linhas)
DELETE é um comando DML.
"TRUNCATE Remove todas as linhas de uma tabela sem registrar as exclusões de linhas individuais. TRUNCATE TABLE é semelhante à instrução DELETE sem cláusula WHERE; no entanto, TRUNCATE TABLE é mais rápido e usa menos recursos do sistema e do log de transações..." Leia mais
Você precisa criar o comando usando um sql dinâmico e executá-lo: (algo como esta consulta)
Links úteis
Truncar é um comando ddl que funciona no nível da página. Simplesmente desaloque páginas no nível da partição e do objeto. Considerando que delete é um comando dml e funciona no nível da linha. Dentro da página, ele pesquisa o deslocamento da linha e marca o registro como excluído.
Portanto, de acordo com a instrução acima, você não pode usar a instrução truncate com query.
Uma cláusula where pode ser usada junto com um comando Truncar
Todo desenvolvedor SQL deseja controle total sobre o banco de dados por consulta. Devido a isso eles começam a pensar além da sintaxe SQL. Um desses equívocos é se uma cláusula where deve ser usada junto com um comando Truncar para realizar algumas operações condicionais.
Por exemplo, se alguém quiser excluir todos os registros da semana passada (7 dias) usando o comando Truncar. Embora isso possa ser feito usando "Delete from table_name where conditions", mas truncate é usado porque é mais rápido que a consulta Delete.
A resposta para a pergunta "Uma cláusula where pode ser usada junto com um comando Truncate" é SIM. A instrução Truncate significa Tudo ou Nada. Isso significa que todos os registros da Tabela serão excluídos ou nenhum deles será excluído.
TRUNCAR TABELA
TRUNCATE TABLE é uma instrução em SQL que exclui todos os registros em uma tabela muito rapidamente desalocando as páginas de dados usadas pela tabela. A desalocação das páginas de dados reduz a sobrecarga de recursos de registrar as exclusões feitas, bem como o número de bloqueios adquiridos. Os registros removidos pela instrução de consulta TRUNCATE TABLE não podem ser restaurados, portanto, você precisa ter muito cuidado antes de executar a consulta TRUNCATE TABLE.