none
erro de sintax RRS feed

  • Pergunta

  •  

    Pessoal,

     

    o que pode estar de errado neste select abaixo, ao rodar a proc da o seguinte erro

    Invalid object name '00198 + @tabela '.

     

    pelo visto ele esta entendendo que @tabela é o nome da variável, como eu conserto isto?

     

    if (select count(1) from [00198 + @tabela ]) <= 0

     

     

    obrigado,

     

     

    quarta-feira, 7 de janeiro de 2009 13:19

Respostas

  • Bom Dia,

     

    Da forma que está, você está procurando por uma tabela chamada "00198 + @tabela". O fato de estar em colchetes faz com que esse nome (com espaços e outros caractéres inválidos) seja procurado. Se a idéia é montar o nome da tabela dinamicamente, você terá que optar por uma "desaconselhável" sql dinâmica. Ex:

     

    Code Snippet

    declare @cmdSQL VARCHAR(200), @tabela VARCHAR(20)

    SET @cmdSQL = 'if (select count(1) from 00198' + @tabela +') <= 0'

    EXEC (@cmdSQL)

     

    O problema com esse tipo de abordagem é que você terá que codificar não somente o IF como também o resto do comando. Isso pode torná-lo bem difícil de implementar e manter. Se possível tente trabalhar com o nome da tabela fixo e colocar uma coluna de diferenciação. Ao invés de manter Tab1, Tab2, Tab3 e TabN, tente ter uma única tabela "Tab" e colocar uma coluna para diferenciação (1, 2, 3 e N)

     

    [ ]s,

     

    Gustavo

    http://gustavomaiaaguiar.spaces.live.com

     

     

    quarta-feira, 7 de janeiro de 2009 13:35
  • Olá,

     

    Você deve fazer da seguinte forma:

     

    Exemplo:

     

    declare @sql varchar(8000)

    declare @tabela varchar(8000)

    set @tabela = 'sys.objects'

     

    set @sql = 'select count(*) from ' + @tabela

    exec( @sql )

     

     

    Ou seja, o comando todo deve ser dinâmico.

     

    Abraços

    quarta-feira, 7 de janeiro de 2009 13:39

Todas as Respostas

  • Bom Dia,

     

    Da forma que está, você está procurando por uma tabela chamada "00198 + @tabela". O fato de estar em colchetes faz com que esse nome (com espaços e outros caractéres inválidos) seja procurado. Se a idéia é montar o nome da tabela dinamicamente, você terá que optar por uma "desaconselhável" sql dinâmica. Ex:

     

    Code Snippet

    declare @cmdSQL VARCHAR(200), @tabela VARCHAR(20)

    SET @cmdSQL = 'if (select count(1) from 00198' + @tabela +') <= 0'

    EXEC (@cmdSQL)

     

    O problema com esse tipo de abordagem é que você terá que codificar não somente o IF como também o resto do comando. Isso pode torná-lo bem difícil de implementar e manter. Se possível tente trabalhar com o nome da tabela fixo e colocar uma coluna de diferenciação. Ao invés de manter Tab1, Tab2, Tab3 e TabN, tente ter uma única tabela "Tab" e colocar uma coluna para diferenciação (1, 2, 3 e N)

     

    [ ]s,

     

    Gustavo

    http://gustavomaiaaguiar.spaces.live.com

     

     

    quarta-feira, 7 de janeiro de 2009 13:35
  • Olá,

     

    Você deve fazer da seguinte forma:

     

    Exemplo:

     

    declare @sql varchar(8000)

    declare @tabela varchar(8000)

    set @tabela = 'sys.objects'

     

    set @sql = 'select count(*) from ' + @tabela

    exec( @sql )

     

     

    Ou seja, o comando todo deve ser dinâmico.

     

    Abraços

    quarta-feira, 7 de janeiro de 2009 13:39
  •  Gustavo Maia Aguiar wrote:

    Bom Dia,

     

    Da forma que está, você está procurando por uma tabela chamada "00198 + @tabela". O fato de estar em colchetes faz com que esse nome (com espaços e outros caractéres inválidos) seja procurado. Se a idéia é montar o nome da tabela dinamicamente, você terá que optar por uma "desaconselhável" sql dinâmica. Ex:

     

    Code Snippet

    declare @cmdSQL VARCHAR(200), @tabela VARCHAR(20)

    SET @cmdSQL = 'if (select count(1) from 00198' + @tabela +') <= 0'

    EXEC (@cmdSQL)

     

    O problema com esse tipo de abordagem é que você terá que codificar não somente o IF como também o resto do comando. Isso pode torná-lo bem difícil de implementar e manter. Se possível tente trabalhar com o nome da tabela fixo e colocar uma coluna de diferenciação. Ao invés de manter Tab1, Tab2, Tab3 e TabN, tente ter uma única tabela "Tab" e colocar uma coluna para diferenciação (1, 2, 3 e N)

     

    [ ]s,

     

    Gustavo

    http://gustavomaiaaguiar.spaces.live.com

     

     

     

    Putz, se eu for fazer isto vai dar um trabalhão, e na verdade eu precisava apenas fazer uma manutenção em algo que ja esta pronto, droga, mas obrigado mesmo assim Gustavo e Demétrio, vou ter que pensar em outra solução sem criar o comando desta maneira...envolvendo codigo direto no .net...

     

    que lama :-(

    quarta-feira, 7 de janeiro de 2009 14:04