How to use a variable across the scope of batch SQL

Asked

Viewed 122 times

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
  • 1

    Marcelo, you can use this tip: http://stackoverflow.com/a/5410799/1898543

  • It may be in the form of Procedure or you want to keep as batch?

  • Keeping as batch, @Ciganomorrisonmendez

1 answer

3


Every time you call the GO the variables are discarded. Then remove the GO of the script

Browser other questions tagged

You are not signed in. Login or sign up in order to post.