none
Sintaxe incorreta próxima a 'GO'. RRS feed

  • Pergunta

  • Olá pesoal!

    Porque raio de meleca from hell este código me retorna erro próximo a GO ????

    IF OBJECT_ID('USUARIOSSelecionarPorLogin') IS NOT NULL
    BEGIN
    DROP PROCEDURE USUARIOSSelecionarPorLogin
    END
    GO
    CREATE PROCEDURE USUARIOSSelecionarPorLogin
    @flag bit output,-- retorna 0 se falhar, 1 se sucesso
    @Erro nvarchar(max) output, -- retorna menssagem de erro
    @login varchar(30)
    AS
    DECLARE
    @sql nvarchar(max),-- retorna a Query SQL
    @IDENT int-- Ocupa parametro que retorna @@IDENTITY para INSERT
    --Chama a procedure que executa a query
    SET @sql = 'SELECT [ID], [LOGIN], [SENHA] FROM [USUARIOS] WITH (INDEX = [IX_LOGIN]) WHERE [LOGIN] = ''' + CAST(@login AS nvarchar(max)) + ''';';
    EXEC ExecutaQuery @flag output, @IDENT output, @Erro output, @sql, 'USUARIOSSelecionarPorLogin' ;
    GO


    Se eu executo o código sem a ultima linha (GO) ele roda normalmente. Só que ele faz parte de um código em lote maior...



    sexta-feira, 24 de março de 2017 12:14

Respostas

  • Valew William! Mas se eu entendi bem, não tenho nenhum GO dentro das procedures

    Na sua query original (que voce postou no primeiro post) existam declaraçoes sem "end",  o que faz com que o query editor trate os GO como parte da declaraçao:

    Veja um exemplo de como a instruçao para a criaçao da SP deveria ser feita:

    CREATE PROCEDURE AddBrand
    @BrandName nvarchar(50)
    AS
    BEGIN --inicia bloco 
       DECLARE 
          @CategoryID int = null,
          @BrandID int = null
    
        SELECT @BrandID = BrandID FROM tblBrand WHERE BrandName = @BrandName
    
       INSERT INTO tblBrandinCategory (CategoryID, BrandID) 
           VALUES (@CategoryID, @BrandID)
    
    END  -fim do bloco
    
    GO

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    sexta-feira, 24 de março de 2017 14:00

Todas as Respostas

  • Bom dia,

    Não sei se vai resolver mas experimente adicionar um Begin depois do As e um End antes do Go.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 24 de março de 2017 12:41
  • Obrigado pela atenção gapimex. Mas não resolveu. E o pior é que se eu simplesmente comentar aquele GO o SQL executa o código sem erros... veja na imagem:

    sexta-feira, 24 de março de 2017 12:49
  • Remova todos os "GO"s da interior da sua SP. GO nao é uma instruçao SQL válida. O SSMS usa o GO somente como instruçao interna para separar comando executados à partir da Query Editor. Ele é um comando e nao uma instruçao.

    Os GOs que estao fora servem somente como um separador de execuçao de instruçoes.

    Dentro da sp, voce nao precisa disso.

    Fonte:https://msdn.microsoft.com/en-us/library/ms188037(v=sql.110).aspx

    Veja a nota:

    "GO is not a Transact-SQL statement; it is a command recognized by the sqlcmd and osql utilities and SQL Server Management Studio Code editor."

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".




    sexta-feira, 24 de março de 2017 12:50
  • Bom dia William! Mas aí o número de erros aumenta muito, pois parece que o comando Create Procedure só pode aparecer 1 vez em cada lote de instruções e no início. veja só... os erros que foram adicionados:

    Mensagem 111, Nível 15, Estado 1, Procedimento USUARIOSSelecionarPorLogin, Linha 13
    'CREATE/ALTER PROCEDURE' deve ser a primeira instrução em um lote de consultas.
    Mensagem 134, Nível 15, Estado 1, Procedimento USUARIOSSelecionarPorLogin, Linha 26
    O nome da variável '@flag' já foi declarado. Os nomes de variáveis devem ser exclusivos em um lote de consultas ou em um procedimento armazenado.
    Mensagem 134, Nível 15, Estado 1, Procedimento USUARIOSSelecionarPorLogin, Linha 33
    O nome da variável '@sql' já foi declarado. Os nomes de variáveis devem ser exclusivos em um lote de consultas ou em um procedimento armazenado.
    Mensagem 137, Nível 15, Estado 2, Procedimento USUARIOSSelecionarPorLogin, Linha 33
    É necessário declarar a variável escalar "@id_usuario".

    sexta-feira, 24 de março de 2017 12:58
  • Veja bem... eu disse retirar os "GO"s do interior da sua SP. 

    Veja o Exemplo abaixo:

    CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> 
          -- Add the parameters for the stored procedure here
          <@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
          <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
    AS
    BEGIN
          -- SET NOCOUNT ON added to prevent extra result sets from
          -- interfering with SELECT statements.
          SET NOCOUNT ON;
    
        -- Insert statements for procedure here
          SELECT @Param1, sysname, @p1>, <@Param2, sysname, @p2>
          GO -- Este Go esta dentro da declaracao da SP e nao é reconhecido
    END
    GO -- Este go esta fora e é reconhecido pelo SSMS.. Ele serve para executar o CREATE PROCEDURE declarado acima dele
    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 24 de março de 2017 13:11
  • Valew William! Mas se eu entendi bem, não tenho nenhum GO dentro das procedures
    sexta-feira, 24 de março de 2017 13:32
  • PESSOAL! AGORA EU PIREI...

    Estava aqui colocando/tirando GO e END pra lá e pra cá, testando para ver o que poderia ser quando funcionou. Ai vejam bem...

    Criei outra janela de consulta e colei o codigo que funcionou. copiei e colei logo antes o codigo que não funciona. Como sabem se selecionou um trecho e executo o SQL executa apenas a parte selecionada... Bom minha surpresa foi enorme quando percebi que os códigos são idênticos!!! Até colei os 2 no Excel e pedi pra comparar linha a linha e tudo idêntico.

    Mas quando executo o que dava erro continua dando erro e se seleciono o que funciona continua funcionando!!!

    Alguem poderia testar aí no SQL Maneger de vcs??? Vejam na imagens ...

    sexta-feira, 24 de março de 2017 13:42
  • Valew William! Mas se eu entendi bem, não tenho nenhum GO dentro das procedures

    Na sua query original (que voce postou no primeiro post) existam declaraçoes sem "end",  o que faz com que o query editor trate os GO como parte da declaraçao:

    Veja um exemplo de como a instruçao para a criaçao da SP deveria ser feita:

    CREATE PROCEDURE AddBrand
    @BrandName nvarchar(50)
    AS
    BEGIN --inicia bloco 
       DECLARE 
          @CategoryID int = null,
          @BrandID int = null
    
        SELECT @BrandID = BrandID FROM tblBrand WHERE BrandName = @BrandName
    
       INSERT INTO tblBrandinCategory (CategoryID, BrandID) 
           VALUES (@CategoryID, @BrandID)
    
    END  -fim do bloco
    
    GO

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    sexta-feira, 24 de março de 2017 14:00
  • Agradeço a atenção e peço desculpas por tomar o tempo de vcs.

    Willian repare na última resposta que coloquei, que o problema se resolveu sozinho... E pior, pq eu concordo com o William que deveria ter o BEGIN ... END mas funcionou sem eles e quando coloco da erro próximo  ao END. Kkkkkkkkk!!!!

    Fiquei ate curioso mas não acho que vou conseguir descobrir o que realmente aconteceu aqui.

    sexta-feira, 24 de março de 2017 14:09