31 Mar 2011
Posted by: Ricardo Pichler in: X++
Caros,
Uma vez eu precisei ‘limpar’ um BD de produção, foi quando o Fraga ainda estava ajudando a Microsoft no suporte via PrimeIT (já faz tempo!). O fato aconteceu porque os consultores tinham criado muitas empresas de teste na base de produção (pela facilidade de só trocar de empresa ao invés de abrir outra instância) e com isso trouxeram um prejuízo enorme quando fomos migrar de um release para outro, a ponto de termos que debugar processo de upgrade, até então, desconhecido para o suporte da MS Brasil! Acredito eu, que os consultores fazem isto por falta de informação, por não saberem como é o processo de upgrade, onde existem scripts de pré e pós sincronização que executam rotinas em muitas tabelas, uma vez para cada DataAreaId encontrado.
A solução que encontrei na época (e lembrei dela agora porque vi em outro artigo) foi vasculhar tabela por tabela procurando pelos DataAreaIDs que eu gostaria de apagar, o que resultou no sequinte script:
--Declarando as variáveis que irei usar DECLARE @TABLE VARCHAR(100) DECLARE @STATEMENT VARCHAR(500) DECLARE LOCALTABLE CURSOR FOR SELECT NAME FROM SYS.TABLES DECLARE @MYDATABASE VARCHAR(100) DECLARE @MYCOMPANIES VARCHAR(100) --Especificando a Base de Dados SELECT @MYDATABASE = 'DAX_HOM' --Especificando os DataAreaIds que eu quero apagar SELECT @MYCOMPANIES = '(''VC1'', ''VC2'', ''VC3'')' --Abrindo o Cursor OPEN LOCALTABLE --Carregando o Cursor pela Primeira vez FETCH NEXT FROM LOCALTABLE INTO @TABLE WHILE @@FETCH_STATUS = 0 BEGIN BEGIN TRY SET @STATEMENT = N'DELETE FROM [' + @MYDATABASE + '].[DBO].[' + @TABLE + '] WHERE [DATAAREAID] IN ' + @MYCOMPANIES PRINT @STATEMENT EXECUTE SP_EXECUTESQL @STATEMENT END TRY BEGIN CATCH PRINT 'DataAreaID não encontrado na Tablea: ' + @TABLE END CATCH FETCH NEXT FROM LOCALTABLE INTO @TABLE END CLOSE LOCALTABLE DEALLOCATE LOCALTABLE |
Usei um cursor para navegar em todas as tabelas e, a partir daí, removo o que tiver o DataAreaId que quero, nas tabelas onde não há DataAreaId é gerada uma excessão que é tratada no CATCH e com isso a rotina faz a limpeza geral.
Nem preciso dizer o cuidado que deve ser tomado antes de rodar este comando né!?
[]s
Pichler
7 Responses
base de datos de empresas Ecuador
12|Oct|2018 1base de datos de empresas Chile
mi novio dejo de ser cariñoso
24|Jul|2019 2mi novio dejo de ser cariñoso
Limpando todas as tabelas do AX (especificando DataAreaId) by Dynamics AX Brasil
tatuajes originales para mujer en la pierna
01|Aug|2019 3tatuajes originales para mujer en la pierna
Limpando todas as tabelas do AX (especificando DataAreaId) by Dynamics AX Brasil
tattoo para mujeres gatos
08|Aug|2019 4tattoo para mujeres gatos
Limpando todas as tabelas do AX (especificando DataAreaId) by Dynamics AX Brasil
que significan los tatuajes de rosas negras
09|Aug|2019 5que significan los tatuajes de rosas negras
Limpando todas as tabelas do AX (especificando DataAreaId) by Dynamics AX Brasil
tatuajes de parejas numeros romanos
29|Sep|2019 6tatuajes de parejas numeros romanos
Limpando todas as tabelas do AX (especificando DataAreaId) by Dynamics AX Brasil
musica gratis 50 cent
04|Oct|2019 7musica gratis 50 cent
Limpando todas as tabelas do AX (especificando DataAreaId) by Dynamics AX Brasil
Leave a reply
Search
Tags / Categorias
RSS
Arquivo
Blogroll
A design creation of Design Disease
Copyright © 2007 - Dynamics AX Brasil - is proudly powered by WordPress
InSense 1.0 Theme by Design Disease brought to you by HostGator Web Hosting. (Modified by Ricardo Pichler.)