none
object_id RRS feed

  • Pergunta

  • Boa noite pessoal, tudo bem?

    tenho esta instrução que não está funcionando, alguém poderia por favor me passar o que está errado:

    Declare @Tabela char
    Set @Tabela='teste'
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'" + teste + "') AND type in(N'U'))
    DROP TABLE @teste

    não consigo deletar a tabela, apresenta o seguinte erro:

    Msg 102, Level 15, State 1, Line 4
    Incorrect syntax near '@teste'.

    Muito obrigado

    sexta-feira, 1 de junho de 2012 21:12

Respostas

  • Eduardo,

    Você está tentando executar o DROP em uma variável, e não na tabela em si. 

    Outro erro é no uso da função OBJECT_ID, onde você está tentando usar aspas para concatenar o valor (acredito que sua intenção é concatenar a variável).

    Essa variável está sendo declarada como CHAR, mas você não definiu a quantidade de caracteres que a variável pode ter. Quando isso não é definido, o SQL entende que ele terá uma posição, logo, mesmo que você defina o valor dela como 'teste', o que vai ficar armazenado é 't'.

    Não vejo necessidade de declarar uma variável para isso, já que você já tem o nome da tabela definido. Mas, veja o exemplo usando variável para o nome da tabela:

    DECLARE @CmdSql NVARCHAR(MAX) DECLARE @Tabela CHAR(5) SET @Tabela = 'Teste' IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@Tabela) AND type in(N'U')) BEGIN SET @CmdSql = N'DROP TABLE ' + @Tabela EXEC sp_ExecuteSql @CmdSql END

    ELSE
    BEGIN
    PRINT 'Tabela ' + @tabela + ' não existe!'
    END

    Execute essa query duas vezes, na primeira irá excluir sua tabela, na segunda execução deverá exibir a mensagem.


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com



    • Editado Philipe Souza sábado, 2 de junho de 2012 05:34
    • Sugerido como Resposta Philipe Souza sábado, 2 de junho de 2012 19:58
    • Marcado como Resposta Heloisa Pires sexta-feira, 8 de junho de 2012 14:33
    sábado, 2 de junho de 2012 05:30