Frequentemente precisamos importar dados de uma tabela criando registros em outra tabela (ou na mesma). Acontece que quando temos formatos diferentes, pela PSDU fica impossível. Então é necessário criar uma rotina para isso, ou então utilizar um artifício pelo SQL Management mesmo.
Segue um exemplo de query que cria uma outra query para, por exemplo, copiar as Previsões de Venda (tabela SC4) para o Plano Mestre de Produção (tabela SHC) de uma determinado período. Esse exemplo é apenas para ilustrar, pois esse artifício pode ser usado para qualquer outra coisa e inclusive pode ser aperfeiçoado dependendo da necessidade:
SELECT 'INSERT INTO SHC010 (HC_FILIAL,HC_PRODUTO,HC_DATA,HC_QUANT,HC_DOC,R_E_C_N_O_) SELECT ''01'','''+ C4_PRODUTO+''','''+ C4_DATA+''','+ STR(C4_QUANT)+','''+ C4_DOC+''','+ '(SELECT CASE WHEN MAX(R_E_C_N_O_) IS NULL THEN 1 ELSE MAX(R_E_C_N_O_)+1 END FROM SHC010)' SQLSTR FROM SC4010 WHERE D_E_L_E_T_ = ' ' AND C4_DATA BETWEEN '20141027' AND '20141031' ORDER BY C4_DATA, C4_PRODUTO, C4_LOCAL
Perceba que para o R_E_C_N_O_ utilizamos uma subquery que recalcula em cada inserção. Qual é o resultado dessa query? Configure no Management Studio no menu Query / Results to / Results to Text e terá o resultado como texto simples:
SQLSTR ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- INSERT INTO SHC010 (HC_FILIAL,HC_PRODUTO,HC_DATA,HC_QUANT,HC_DOC,R_E_C_N_O_) SELECT '01','05010 ','20141027', 100,'271014 ',(SELECT CASE WHEN MAX(R_E_C_N_O_) IS NULL THEN 1 ELSE MAX(R_E_C_N_O_)+1 END FROM SHC010) ... INSERT INTO SHC010 (HC_FILIAL,HC_PRODUTO,HC_DATA,HC_QUANT,HC_DOC,R_E_C_N_O_) SELECT '01','05011 ','20141027', 420,'271014 ',(SELECT CASE WHEN MAX(R_E_C_N_O_) IS NULL THEN 1 ELSE MAX(R_E_C_N_O_)+1 END FROM SHC010) ... INSERT INTO SHC010 (HC_FILIAL,HC_PRODUTO,HC_DATA,HC_QUANT,HC_DOC,R_E_C_N_O_) SELECT '01','05040 ','20141027', 130,'271014 ',(SELECT CASE WHEN MAX(R_E_C_N_O_) IS NULL THEN 1 ELSE MAX(R_E_C_N_O_)+1 END FROM SHC010)