Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como você trunca todas as tabelas em um banco de dados usando TSQL?


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