none
Must declare the scalar variable "@minhavariavel" RRS feed

  • Pergunta

  • Bom dia,

    Estamos migrando um banco de dados do 2008 para o SQL 2014, porém, nos deparamos com o seguinte erro.

    Ao executar determinada procedure recebemos o erro.

    Must declare the scalar variable "@minhavariavel"

    Porém, a variável existe, DECLARE "@MINHAVARIAVEL INT;" o que tem de diferença é que a variável está declarada em maiúscula e no código da procedure ela está minúscula, já verifiquei o COLLATE do banco e está correto Latin1_General_CI_AS.


    Atenciosamente, Ruberlei. www.t-sql.com.br

    quinta-feira, 13 de agosto de 2015 12:17

Respostas

Todas as Respostas

  • Opa bom dia,

    Como que esta configurado a collation da instancia?


    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net

    quinta-feira, 13 de agosto de 2015 12:50
  • Latin1_General_BIN

    Atenciosamente, Ruberlei. www.t-sql.com.br

    quinta-feira, 13 de agosto de 2015 13:00
  • Entao o problema pode ser esse, a collation da instancia esta diferente da collation do banco. 

    testa fazendo isso.

    SELECT Coluna
    FROM tabela
    WHERE Coluna COLLATE Latin1_General_CS_AS = 'teste'



    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net

    quinta-feira, 13 de agosto de 2015 13:49
  • Bom dia,

    Minha dúvida é, qual collate que as procedure utilizam, pois, se a procedure está no meu banco e meu banco tem o collate correto, qual motivo da diferença, e como resolver sem ter que adicionar o collate como em seu exemplo.


    Atenciosamente, Ruberlei. www.t-sql.com.br

    quinta-feira, 13 de agosto de 2015 13:53
  • Então você esta tendo conflito de collate, já tive o esse problema e a solução que tive que fazer é forçar a collation Coluna COLLATE Latin1_General_CI_AS, fora isso não obtive sucesso.

    Neste post explica um pouco do seu cenario.

    https://gustavomaiaaguiar.wordpress.com/2008/10/12/como-resolver-problemas-relacionados-a-conflitos-de-collation/

     

    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net


    • Editado Tiago_Neves quinta-feira, 13 de agosto de 2015 15:05
    quinta-feira, 13 de agosto de 2015 14:55
  • Alguém mais?

    Atenciosamente, Ruberlei. www.t-sql.com.br

    quinta-feira, 13 de agosto de 2015 20:49
  • Deleted
    sábado, 22 de agosto de 2015 00:00
  • Boa noite,

    Irei postar o trecho do código da procedure, é que agora não estou com ela em mãos, mais no máximo até amanhã coloco.

    Com relação ao motivo do COLLATE como nosso banco será mais um banco em uma instância que já existe N bancos não sei qual o motivo de terem colocado esse COLLATE e como já tem vários bancos rodando a mudança agora poderia causa impacto negativo.


    Atenciosamente, Ruberlei. www.t-sql.com.br

    sábado, 22 de agosto de 2015 00:24
  • Deleted
    sábado, 22 de agosto de 2015 09:49
  • Bom dia,

    Segue o código da procedure.

    create procedure p_nomeproce(@param int) as
    
    declare @CODUSUARIO INT;
    
    begin
    	set @codusuario = NULL;
    
    regra.... da procedure
    end;
    
    
    
    
    
    
    
    
    O mais estranho é que no SQL Server 2008 funciona e está como os mesmos collate ou seja da Instância está 'Latin1_General_BIN' e do meu banco está 'Latin1_General_CI_AS'.


    Atenciosamente, Ruberlei. www.t-sql.com.br

    segunda-feira, 24 de agosto de 2015 11:38
  • Deleted
    segunda-feira, 24 de agosto de 2015 14:24
  • Bom dia, José,

    Qualquer operação de 'ALTER PROCEDURE' que tente realizar não deixa e da o erro Must declare the scalar variable "@minhavariavel", sendo assim, teria que fazer a 'correção'.


    Atenciosamente, Ruberlei. www.t-sql.com.br

    segunda-feira, 24 de agosto de 2015 14:53
  • Deleted
    segunda-feira, 24 de agosto de 2015 20:51