Ao lidar com a exclusão de dados de tabelas que possuem relacionamentos de chave estrangeira - que é basicamente o caso de qualquer banco de dados projetado adequadamente - podemos desabilitar todas as restrições, excluir todos os dados e reativar as restrições
-- disable all constraints
EXEC sp_MSForEachTable "ALTER TABLE ? NOCHECK CONSTRAINT all"
-- delete data in all tables
EXEC sp_MSForEachTable "DELETE FROM ?"
-- enable all constraints
exec sp_MSForEachTable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Mais sobre como desabilitar restrições e gatilhos aqui
se algumas das tabelas tiverem colunas de identidade, podemos querer replantá-las
EXEC sp_MSForEachTable "DBCC CHECKIDENT ( '?', RESEED, 0)"
Observe que o comportamento do RESEED difere entre uma nova tabela e uma que teve alguns dados inseridos anteriormente do BOL:
DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)
O valor de identidade atual é definido como newReseedValue. Se nenhuma linha tiver sido inserida na tabela desde que ela foi criada, a primeira linha inserida após a execução de DBCC CHECKIDENT usará newReseedValue como a identidade. Caso contrário, a próxima linha inserida usará newReseedValue + 1. Se o valor de newReseedValue for menor que o valor máximo na coluna identity, mensagem de erro 2627 será gerada em referências subseqüentes à tabela.
Obrigado a Robert por apontar o fato de que desabilitar restrições não permite usar truncar, as restrições teriam que ser descartadas e depois recriadas