AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.04.2011, 00:12   #1  
Blog bot is offline
Blog bot
Участник
 
25,626 / 848 (80) +++++++
Регистрация: 28.10.2006
Dynamics AXBR: Limpando todas as tabelas do AX (especificando DataAreaId)
Источник: http://feedproxy.google.com/~r/daxbr/~3/8oPh2pKZKbw/
==============

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:

PHP код:
--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






Источник: http://feedproxy.google.com/~r/daxbr/~3/8oPh2pKZKbw/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35
dynamics-ax: Official Details about Dynamics AX '6' released, including comments from Microsofts Kees Hertogh Blog bot DAX Blogs 0 11.01.2011 05:22
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:53.