CREATE PROCEDURE sp_update_unidade_medida_lojamix_pdv @un_antiga VARCHAR(3), @un_nova VARCHAR(2) AS BEGIN PRINT 'Atualizando dados da unidade ' + @un_antiga + ' para a unidade ' + @un_nova; -- DESABILITA TODAS AS FK'S DO BANCO PRINT 'Desabilitando FKs'; EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'; IF((SELECT COUNT(*) FROM unidade_medida WHERE sigla = @un_nova) <= 0) BEGIN PRINT 'Atualizando a sigla da unidade de medida'; UPDATE unidade_medida SET sigla = @un_nova WHERE sigla = @un_antiga; END -- ALTERA A UNIDADE DE NO CADASTRO DO PRODUTO PRINT 'Atualizando dados da unidade nos produtos'; UPDATE produto SET id_unidade_medida = (SELECT id_unidade_medida FROM unidade_medida WHERE sigla = @un_nova) WHERE id_unidade_medida = (SELECT id_unidade_medida FROM unidade_medida WHERE sigla = @un_antiga); -- ALTERA A SIGLA DA UNIDADE DE MEDIDA NO PRODUTO SINONIMO PRINT 'Atualizando dados da unidade nos produtos sinonimos'; UPDATE produto_sinonimo SET sigla_unidade_logistica = @un_nova WHERE sigla_unidade_logistica = @un_antiga; -- ALTERA A SIGLA DA UNIDADE DE MEDIDA PRIMARIA NO ITEM DA NOTA FISCAL, SE HOUVER IF((SELECT COUNT(*) FROM item_nota_fiscal WHERE sigla_unidade_logistica_primaria = @un_antiga) > 0) BEGIN PRINT 'Atualizando dados da unidade primaria nos itens das notas fiscais'; UPDATE item_nota_fiscal SET sigla_unidade_logistica_primaria = @un_nova WHERE sigla_unidade_logistica_primaria = @un_antiga; END -- ALTERA A SIGLA DA UNIDADE DE MEDIDA SECUNDARIA NO ITEM DA NOTA FISCAL, SE HOUVER IF((SELECT COUNT(*) FROM item_nota_fiscal WHERE sigla_unidade_logistica_secundaria = @un_antiga) > 0) BEGIN PRINT 'Atualizando dados da unidade secundaria nos itens das notas fiscais'; UPDATE item_nota_fiscal SET sigla_unidade_logistica_secundaria = @un_nova WHERE sigla_unidade_logistica_secundaria = @un_antiga; END -- ALTERA A SIGLA DA UNIDADE LOGISTICA PRIMARIA DA OPERACAO PDV, SE HOUVER IF((SELECT COUNT(*) FROM item_operacao_pdv WHERE sigla_unidade_logistica_primaria = @un_antiga) > 0) BEGIN PRINT 'Atualizando sigla da unidade logistica primaria na operacao_pdv'; UPDATE item_operacao_pdv SET sigla_unidade_logistica_primaria = @un_nova WHERE sigla_unidade_logistica_primaria = @un_antiga; END -- ALTERA A SIGLA DA UNIDADE LOGISTICA SECUNDARIA DA OPERACAO PDV, SE HOUVER IF((SELECT COUNT(*) FROM item_operacao_pdv WHERE sigla_unidade_logistica_secundaria = @un_antiga) > 0) BEGIN PRINT 'Atualizando sigla da unidade logistica primaria nas operacoes de pdv processadas'; UPDATE item_operacao_pdv SET sigla_unidade_logistica_secundaria = @un_nova WHERE sigla_unidade_logistica_secundaria = @un_antiga; END -- HABILITA TODAS AS FK'S DO BANCO PRINT 'Habilitando FKs'; EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'; END -- SE PRECISAR EXCLUIR A PROCEDURE DROP PROCEDURE sp_update_unidade_medida_lojamix_pdv; -- EXECUTAR A PROCEDURE, PARAMENTROS: UNIDADE DE MEDIDA ANTIGA, NOVA UNIDADE DE MEDIDA EXEC sp_update_unidade_medida_lojamix_pdv '', '';