none
Sintaxe incorreta próxima a '@errno'. RRS feed

  • Pergunta

  • Olá,

    Instalei o SQL SERVER 2014 express, o qual ja trabalhei na versão 2005,2008, 2012 em suas versões express.

    Restaurei uma base que usava em outro lugar para ele. Então qualquer transação eu que faço da erro. insert, delete, qualquer transação simples. ex: insert into CompraP (cdCompra, cdProduto) values (297,58) .

    O erro é : Sintaxe incorreta próxima a '@errno'.

    Nunca tive esse problema, notei que isso começou acontecer agora que estou usando o windows 10. não sei se esse é o problema. Não consigo achar uma solução para o mesmo, E não achei a versão 2016 express disponível para download para ver se resolve o problema.

    Então estou com o banco indisponivel para qualquer transação, somente consulta.

    Será que alguém tem alguma dica. 

    Obrigado.

    J.Martins.

    quarta-feira, 24 de fevereiro de 2016 14:49

Respostas

  • Martins007,

    Provavelmente você está utilizando a função RAISERROR(). A partir da versão 2012 você não pode mais utilizar a sintaxe desta função sem parênteses que era permitido até a versão 2008 R2.

    A partir da versão 2012 do SQL Server também existe uma nova função chamada THROW() que faz a mesma função da função RAISERROR(), mas não é necessário passar os números de erro e a string de mensagem com as funções ERROR_(), pois isto já está implementado nativamente pela função THROW().

    Funcionalidade Transact-SQL descontinuada na versão 2012:

    Por gentileza leia os links abaixo para maiores informações:

    https://msdn.microsoft.com/library/ms144262%28v=sql.110%29?f=255&MSPPError=-2147217396

    http://blogs.msdn.com/b/manub22/archive/2013/12/31/new-throw-statement-in-sql-server-2012-vs-raiserror.aspx


    Felipe Lauffer
    MCSA: SQL Server | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]

    quinta-feira, 25 de fevereiro de 2016 13:34
  • Rapaz, a solução é simples!

    O problema está na restauração. Se você fizer a restauração (Restore Database) da versão 2008 passando para 2012 ou 2014, correrá o risco de cair neste problema.

    Partindo da ideia de que você já fez a restauração de um arquivo .bak, a solução é fazer o seguinte:

    1 - Crie um novo banco na nova versão do SQL SERVER (sem tabelas, somente o nome do banco e o usuário dele)

    2 - Faça a importação dos dados do banco antigo (o restaurado o qual agora apresenta o erro) para o novo banco criado na nova versão (importe os dados e as tabelas, tudo junto)

    3 - Pronto! Conecte sua aplicação neste novo banco e problema contornado.

    Espero poder ajudar a muitos outros que por ventura enfrentem tal problema!


    OBS: não será possível ter dois bancos com o mesmo nome na mesma instância do SQL Server. Por isso, o novo banco deve ter um nome diferente do banco restaurado (de onde se importará os dados).

    Se alguém gostar dessa solução dá um voto legal aí!

    Felicidade, justiça e paz a todos!

    Ass: Helio Anderson




    sexta-feira, 8 de julho de 2016 01:28

Todas as Respostas

  • Olá Martins,

    Você pode acaso possui alguma trigger nessa tabela CompraP?
    Se sim, ela tem algum RAISERROR?

    Se sim, teu problema pode estar na sintaxe desse comando.

    Espero ter ajudado.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    quarta-feira, 24 de fevereiro de 2016 21:07
  • Martins007,

    Provavelmente você está utilizando a função RAISERROR(). A partir da versão 2012 você não pode mais utilizar a sintaxe desta função sem parênteses que era permitido até a versão 2008 R2.

    A partir da versão 2012 do SQL Server também existe uma nova função chamada THROW() que faz a mesma função da função RAISERROR(), mas não é necessário passar os números de erro e a string de mensagem com as funções ERROR_(), pois isto já está implementado nativamente pela função THROW().

    Funcionalidade Transact-SQL descontinuada na versão 2012:

    Por gentileza leia os links abaixo para maiores informações:

    https://msdn.microsoft.com/library/ms144262%28v=sql.110%29?f=255&MSPPError=-2147217396

    http://blogs.msdn.com/b/manub22/archive/2013/12/31/new-throw-statement-in-sql-server-2012-vs-raiserror.aspx


    Felipe Lauffer
    MCSA: SQL Server | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]

    quinta-feira, 25 de fevereiro de 2016 13:34
  • Pessoal,

    Então não possuo nenhuma triger, nada!  Andei fazendo outros testes. Qualquer transação esta dando erro.  Seja ela por dentro da aplicação ou Management studio , qualquer lugar qualquer transação.

    Depois criei outra base de dados e nenhum problema. Logo deduzi que o problema esta com essa base de dados. Mas como resolver, é alguma configuração que deixa ela assim. Mas como essa base que utilizo a muito tempo... não sei explicar o problema. Como mencionei, começou ao ocorrer após eu formatar e colocar o windows 10. O backup acho que foi gerado no SQLserver 2012.

    Sintaxe incorreta próxima a '@errno.

    Se alguem tiver alguma outra dica, fico grato!

    obrigado.

    quinta-feira, 25 de fevereiro de 2016 17:33
  • Martin,

    tente mudar o nível de compatibilidade de sua base de dados e veja se continua com o erro.

    ALTER DATABASE database_name
    SET COMPATIBILITY_LEVEL = 100

    Att,


    Antero Marques

    quinta-feira, 25 de fevereiro de 2016 17:38
  • Antero,

    Não rolou.... ja fiz isso, fiz novamente para 90, 100, 110, 120. 

    Reinicio o serviço depois e nada.

    Instalei uma versão em ingles do banco para pegar a msg em ingles e para ver se a versão em pt tinha problema.

    mas nada o erro ocorre. 

    Incorrect syntax near '@errno'.

    Tudo leva que é configuração pós a restauração, mas eu ja fiz esse procedimentos milhares de vezes e só agora começou isso, muito estranho não sei mais o que fazer...

    Já estou pensando em usar postgre. pq não sei mais o que fazer.

    obrigado.

    quinta-feira, 25 de fevereiro de 2016 18:06
  • Martins007,

    Poderia postar a estrutura e um exemplo do seu código?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 1 de março de 2016 17:51
    Moderador
  • Rapaz, a solução é simples!

    O problema está na restauração. Se você fizer a restauração (Restore Database) da versão 2008 passando para 2012 ou 2014, correrá o risco de cair neste problema.

    Partindo da ideia de que você já fez a restauração de um arquivo .bak, a solução é fazer o seguinte:

    1 - Crie um novo banco na nova versão do SQL SERVER (sem tabelas, somente o nome do banco e o usuário dele)

    2 - Faça a importação dos dados do banco antigo (o restaurado o qual agora apresenta o erro) para o novo banco criado na nova versão (importe os dados e as tabelas, tudo junto)

    3 - Pronto! Conecte sua aplicação neste novo banco e problema contornado.

    Espero poder ajudar a muitos outros que por ventura enfrentem tal problema!


    OBS: não será possível ter dois bancos com o mesmo nome na mesma instância do SQL Server. Por isso, o novo banco deve ter um nome diferente do banco restaurado (de onde se importará os dados).

    Se alguém gostar dessa solução dá um voto legal aí!

    Felicidade, justiça e paz a todos!

    Ass: Helio Anderson




    sexta-feira, 8 de julho de 2016 01:28