none
Erro em uma sintaxe SQL - Ajuda para resolver RRS feed

  • Pergunta

  • Olá amigos!

    Sou iniciante e estou fazendo uma procedure que gera IDS para as tabelas quando eu passar o nome da tabela. Porém antes de gerá-lo, é feita uma pesquisa no banco de dados para ver se a tabela existe... Quando executo a procedure (para criação no banco) me aparecem uns erros.. é que está com problemas no IF...ElSE e outras partes da estrutura no qual não estou conseguindo resolver. Alguém poderia me ajudar a endireitar essa procilga?

    Abração!

    =========================================================================

    /*---------------------------------------------------------------------------------------------------------
    Stored Procedure para gerar um ID de controle automaticamente quando inserir um registro em uma tabela

    Arquivo: uspGerarIDControle
    Criado por: Jalber Romano
    Data da Criação: 28/04/2015
    */---------------------------------------------------------------------------------------------------------


    CREATE PROCEDURE uspGerarIDControle
    @NomeTabela VARCHAR(30),
    @NomeCampo VARCHAR(30),
    @NumeroControle INT OUTPUT
    AS

    BEGIN

    BEGIN TRY
    BEGIN TRAN
    -- Verifica se existe sequência para tabela/coluna; cria, se não houver
    --1: Verifica se a tabela existe no banco de dados
    IF EXISTS (
    SELECT 
    T.name AS Tabela, 
    C.name AS Coluna
    FROM 
    sys.sysobjects    AS T (NOLOCK) 
    INNER JOIN sys.all_columns AS C (NOLOCK) ON T.id = C.object_id AND T.XTYPE = 'U' 
    WHERE 
    C.name = '@NomeCampo' AND
    T.name = '@NomeTabela'
    ORDER BY 
    T.name ASC)
    BEGIN
    --2: Verifica se a tabela está cadastrada na tabela tblSequencia. Se não estiver, ela será adicionada.
    IF NOT EXISTS (SELECT * FROM dbo.tblTabelaSequencia WHERE NomeTabela = @NomeTabela AND NomeCampo = @NomeCampo)
    INSERT INTO dbo.tblTabelaSequencia (NomeTabela, NomeCampo, UltSeq) VALUES (@NomeTabela, @NomeCampo, 0);

    --Cria um ID Sequencial com base na tabela tblTabelaSequencia
    UPDATE 
    tblTabelaSequencia
    SET @NumeroControle = UltSeq = UltSeq + 1 
    WHERE NomeTabela = @NomeTabela AND NomeCampo = @NomeCampo;
    END
    ELSE
    BEGIN
    RAISERROR('A tabela informada não existe no banco de dados!', 14, 1);
    END
    COMMIT TRAN
    END TRY
    BEGIN CATCH
    ROLLBACK TRAN
    SELECT ERROR_MESSAGE() AS Retorno;
    END CATCH

    END

    quinta-feira, 14 de maio de 2015 18:55

Respostas

  • Boa tarde Jalber,

    O que acontece é que você está utilizando a cláusula ORDER BY dentro da função EXISTS. Experimente retirar e testar a sua procedure novamente.

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    • Marcado como Resposta Jalber Romano quinta-feira, 14 de maio de 2015 19:43
    quinta-feira, 14 de maio de 2015 19:13

Todas as Respostas

  • Boa tarde Jalber,

    O que acontece é que você está utilizando a cláusula ORDER BY dentro da função EXISTS. Experimente retirar e testar a sua procedure novamente.

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    • Marcado como Resposta Jalber Romano quinta-feira, 14 de maio de 2015 19:43
    quinta-feira, 14 de maio de 2015 19:13
  • O Bruno esta certo...

    Coloca top 1 que passa...

    --1: Verifica se a tabela existe no banco de dados
    IF EXISTS (
    SELECT  TOP 1
    T.name AS Tabela, 
    C.name AS Coluna
    FROM 

    quinta-feira, 14 de maio de 2015 19:24
  • Funcionou pessoal!!!

    Muito obrigado pela ajuda!!!

    Que Deus lhes abençoe sempre!

    Abraço :)

    quinta-feira, 14 de maio de 2015 19:44