Eu tenho que fazer uma limpeza de banco de dados para um de nossos bancos de dados em um ambiente sql server 2000. A limpeza inclui basicamente a desabilitação de todos os gatilhos, a exclusão de todos os dados antigos, a habilitação dos gatilhos e a redução do log de transações.
Atualmente o maior problema que tenho é desabilitar os Triggers. Isso teria sido super fácil no sql 2005/2008, pois eles incluíam um comando 'Desativar todos os gatilhos'. Eu tenho uma consulta para listar todos os gatilhos, embora não liste o status do gatilho (isso seria um bônus)
SELECT S2.[name] TableName, S1.[name] TriggerName, CASE WHEN S2.deltrig = s1.id THEN 'Delete' WHEN S2.instrig = s1.id THEN 'Insert' WHEN S2.updtrig = s1.id THEN 'Update' END 'TriggerType' , 'S1',s1.*,'S2',s2.* FROM sysobjects S1 JOIN sysobjects S2 ON S1.parent_obj = S2.[id] WHERE S1.xtype='TR'
A exclusão dos registros será uma exclusão simples para cada tabela, provavelmente não é a maneira mais eficiente de fazer isso, mas é a maneira que foi prescrita.
A redução do log de transações também está classificada, encontrei um artigo sobre como usar o DBCC no site de suporte da Microsoft
Qualquer conselho seria muito apreciado
SQL Server 2000 tem ALTER TABLE foo ENABLE TRIGGER ALL também
E para gerar o script ALTER TABLE necessário, use este
Eu não me incomodaria em testar o status dos gatilhos, pessoalmente. Um gatilho desabilitado não deve existir IMHO. Até porque OBJECTPROPERTY não o suporta no SQL Server 2000
Editar:
Meu erro, OBJECTPROPERTY no SQL Server 2000 tem ExecIsTriggerDisabled conforme comentário. Assim, você pode acompanhar o status antes e depois