3
respostas

Duvida com uma SP

Alguem pode me ajudar e explicar porque o codigo abaixo da erro? Só pra vcs entenderem: [dbo].[RelatorioVias] está vazia, assim não era pra entrar no IF e pelo que entendi, por algum motivo, ta entrando no bloco IF. Onde estou errando?

USE [SR2651CE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[carrossel_relatoriovias]
       AS    
       BEGIN 
             IF (SELECT count(*) FROM [dbo].[RelatorioVias])>0
                    DROP TABLE [dbo].[RelatorioVias_ontem]
                    CREATE TABLE [dbo].[RelatorioVias_ontem](
                                        [IdCarteira] [varchar](50) NULL,
                                        [vNomeCarteira] [varchar](max) NULL,
                                        [IdUnidade] [varchar](50) NULL,
                                        [cMatricula] [varchar](50) NULL,
                                        [IdAcao] [varchar](50) NULL,

ERRO:

Msg 2714, Nível 16, Estado 6, Procedimento carrossel_relatoriovias, Linha 7 [Linha de Início do Lote 0]
There is already an object named 'RelatorioVias_ontem' in the database.

3 respostas

Olá Romulo, tudo bem? Na verdade o problema é que ele não está apagando a tabela por algum motivo, porém você poderia tentar colocar o comando da seguinte forma:

IF (SELECT count(*) FROM [dbo].[RelatorioVias])>0
BEGIN
    DROP TABLE [dbo].[RelatorioVias_ontem]
        CREATE TABLE [dbo].[RelatorioVias_ontem](
                                        [IdCarteira] [varchar](50) NULL,
                                        [vNomeCarteira] [varchar](max) NULL,
                                        [IdUnidade] [varchar](50) NULL,
                                        [cMatricula] [varchar](50) NULL,
                                        [IdAcao] [varchar](50) NULL, <restante do código>
END

Assim você indica que o código entre o BEGIN e o END será executado por completo, já que o erro indica que a tabela RelatorioVias_ontem já existe e nesse caso o DROP TABLE [dbo].[RelatorioVias_ontem] não está funcionando por algum motivo. E você pode executar a query:

SELECT count(*) FROM [dbo].[RelatorioVias]

E verificar qual o resultado que é retornado, porque realmente se a tabela está fazia o resultado é pra ser 0 (zero) e não entrar no bloco TRUE do IF.

E fala pra gente o resultado desses testes!

Jonilson, deu certo com essa sua dica. Mto obrigado!

Que legal Romulo! Fico muito feliz por ajudar, sendo assim você poderia marcar minha resposta como solução desse tópico, assim caso alguém tenha um problema semelhante poderá encontrar a solução facilmente aqui!