2
With the batch below, I want to remove duplicate records and after that UPDATE some values. The querys are in perfect order, but adding some error checks to the execution of the process, I came across the following error:
Must declare the scalar variable "@erroDelete".
How can I declare the variable to be used throughout the scope?
DECLARE @erroDelete INT
SET @erroDelete = 0
PRINT 'Deletando registros duplicados.'
BEGIN TRY
DELETE t
FROM produtos_sumario t
INNER JOIN produtos ON t.cod_produto = produtos.cod_produto
WHERE produtos.cod_empresa <> t.cod_grupo
DELETE t
FROM logistica_sumario t
INNER JOIN produtos ON t.cod_produto = produtos.cod_produto
WHERE produtos.cod_empresa <> t.cod_grupo
DELETE t
FROM cubo t
INNER JOIN produtos ON t.cod_produto = produtos.cod_produto
WHERE produtos.cod_empresa <> t.cod_grupo
DELETE t
FROM cubo_rentabilidade t
INNER JOIN produtos ON t.cod_produto = produtos.cod_produto
WHERE produtos.cod_empresa <> t.cod_grupo
END TRY
BEGIN CATCH
PRINT 'Falha ao deletar registros';
PRINT 'Erro ' + CONVERT(VARCHAR, ERROR_NUMBER(), 1) + ': '+ ERROR_MESSAGE()
SET @erroDelete = 1
END CATCH
GO
/* ATUALIZAR REGISTROS COM NOVO CÓDIGO DE GRUPO DOS PRODUTOS */
IF (@erroDelete = 0)
PRINT 'Atualizando registros.'
BEGIN TRY
/* TABELA Acordos_GR */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM Acordos_GR t
JOIN produtos p ON p.cod_produto = t.cod_produto
WHERE p.cod_produto = t.cod_produto
/* TABELA submetas */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM submetas t
JOIN produtos p ON p.cod_produto = t.cod_produto
WHERE p.cod_produto = t.cod_produto
/* TABELA metas_vendedores */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM metas_vendedores t
JOIN produtos p ON p.cod_produto = t.cod_produto
/* TABELA metas_simulacao */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM metas_simulacao t
JOIN produtos p ON p.cod_produto = t.cod_produto
/* TABELA metas_orcada */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM metas_orcada t
JOIN produtos p ON p.cod_produto = t.cod_produto
WHERE p.cod_produto = t.cod_produto
/* TABELA metas_metas */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM metas_metas t
JOIN produtos p ON p.cod_produto = t.cod_produto
/* TABELA metas */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM metas t
JOIN produtos p ON p.cod_produto = t.cod_produto
/* TABELA itens_notasfiscais */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM itens_notasfiscais t
JOIN produtos p ON p.cod_produto = t.cod_produto
WHERE p.cod_produto = t.cod_produto
/* TABELA cubo_rentabilidade */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM cubo_rentabilidade t
JOIN produtos p ON p.cod_produto = t.cod_produto
WHERE p.cod_produto = t.cod_produto
/* TABELA cubo */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM cubo t
JOIN produtos p ON p.cod_produto = t.cod_produto
WHERE p.cod_produto = t.cod_produto
/* TABELA logistica_sumario */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM logistica_sumario t
JOIN produtos p ON p.cod_produto = t.cod_produto
WHERE p.cod_produto = t.cod_produto
/* TABELA produtos_sumario */
UPDATE t
SET t.cod_grupo = p.cod_empresa
FROM produtos_sumario t
JOIN produtos p ON p.cod_produto = t.cod_produto
WHERE p.cod_produto = t.cod_produto
END TRY
BEGIN CATCH
PRINT 'Falha ao atualizar campo cod_grupo dos registros';
PRINT 'Erro ' + CONVERT(VARCHAR, ERROR_NUMBER(), 1) + ': '+ ERROR_MESSAGE()
END CATCH
GO
Marcelo, you can use this tip: http://stackoverflow.com/a/5410799/1898543
– Fernando A.W.
It may be in the form of Procedure or you want to keep as batch?
– Leonel Sanches da Silva
Keeping as batch, @Ciganomorrisonmendez
– Marcelo de Andrade