none
Mensagem de erro RAISERROR RRS feed

  • Pergunta

  • Bom dia

    Estou utilizando o RAISERROR para apresentar uma mensagem de erro em meu ERP, sendo que quando um campo não é preenchido, no momento da Insert no banco de dados eu informo ao usuário através do comando RAISERROR que o campo esta vazio. Meu problema é que eu gostaria que fosse apenas um informativo onde o usuário iria dar um OK e continuaria o processo de salvamento, mas isso não acontece, o RAISERROR interrompe a ação de salvar, como se fosse um ROLLBACK, alguém conhece uma solução para isso?


    Att.

    quarta-feira, 25 de outubro de 2017 13:37

Respostas

  • Cleber_G , o mundo ideal e que isso fique na aplicação, mas se nada disso for possivel,

    veja esse exemplo bem simples que pode te ajudar 

    CREATE TABLE [dbo].[Pessoas]
    (
    [IdPessoa] [uniqueidentifier] NOT NULL  DEFAULT (newsequentialid()),
    [Nome] [varchar] (100) COLLATE Latin1_General_CI_AI NULL,
    [NomePai] [varchar] (100) COLLATE Latin1_General_CI_AI NULL,
    [NomeMae] [varchar] (100) COLLATE Latin1_General_CI_AI NULL
    )
    

    2) criando a procedure

    CREATE PROCEDURE InsertPessoas (
    @IdPessoa UNIQUEIDENTIFIER,
    @Nome varchar(100),
    @NomePai varchar(100),
    @NomeMae varchar(100)) 
    as  
    BEGIN
    		
    IF ( OBJECT_ID('TEMPDB..#ValidacaoDados') IS NOT NULL )
        DROP TABLE #ValidacaoDados;	
    
    CREATE TABLE #ValidacaoDados
        (
          IdMensagem INT IDENTITY(1,1),
          Mensagem VARCHAR(100),
    	  Severidade VARCHAR(20)
        );
    
    
    	IF( @IdPessoa IS NULL)
    	BEGIN
    			INSERT INTO #ValidacaoDados
    			VALUES
    			(   'A PK da tabela de pessoas não foi informado', -- Mensagem - varchar(100)
    			    'Alta'  -- Severidade - varchar(20)
    			)
    	END
    
    	IF(@Nome IS NULL OR LEN(@Nome) =0) 
    	BEGIN
    		INSERT INTO #ValidacaoDados
    			VALUES
    			(   'O campo Nome deve ser informado', -- Mensagem - varchar(100)
    			    'Alta'  -- Severidade - varchar(20)
    			)	
    	END
    
    	IF(@NomePai IS NULL OR LEN(@NomePai) =0) 
    	BEGIN
    		INSERT INTO #ValidacaoDados
    			VALUES
    			(   'O campo NomePai deve ser informado', -- Mensagem - varchar(100)
    			    'Baixa'  -- Severidade - varchar(20)
    			)
    			
    				
    	END
    
    	IF(@NomeMae IS NULL OR LEN(@NomeMae) =0) 
    	BEGIN
    		INSERT INTO #ValidacaoDados
    			VALUES
    			(   'O campo NomeMae deve ser informado', -- Mensagem - varchar(100)
    			    'Baixa'  -- Severidade - varchar(20)
    			)
    			
    	END
    
    
    	 IF( NOT EXISTS(SELECT 1 FROM #ValidacaoDados AS vd WHERE vd.Severidade ='Alta'))
    	 BEGIN
    			INSERT INTO dbo.Pessoas
    			(
    			    IdPessoa,
    			    Nome,
    			    NomePai,
    			    NomeMae
    			)
    			VALUES
    			(   @IdPessoa, -- IdPessoa - uniqueidentifier
    			    @Nome,   -- Nome - varchar(100)
    			    @NomePai,   -- NomePai - varchar(100)
    			    @NomeMae    -- NomeMae - varchar(100)
    			) 
    	 END
    
    
    	  SELECT * FROM #ValidacaoDados AS vd
    END

    3) testes 

    EXEC dbo.InsertPessoas @IdPessoa = 'F873AC64-2E76-40D1-B875-4A3BF710A0F4', -- uniqueidentifier
                           @Nome = '',       -- varchar(100)
                           @NomePai = '',    -- varchar(100)
                           @NomeMae = ''     -- varchar(100)

    3) testes

    SELECT * FROM dbo.Pessoas AS p

    3) testes

    EXEC dbo.InsertPessoas @IdPessoa = 'F873AC64-2E76-40D1-B875-4A3BF710A0F4', -- uniqueidentifier
                           @Nome = 'Pessoa A',       -- varchar(100)
                           @NomePai = '',    -- varchar(100)
                           @NomeMae = ''     -- varchar(100)

    Veja como ficou 

    SELECT * FROM dbo.Pessoas AS p


    Wesley Neves - Brasilia-DF

     
    https://wesleyneves.wordpress.com/
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves

    quinta-feira, 26 de outubro de 2017 13:13

Todas as Respostas

  • Não prefere tratar a informação no lado da aplicação antes de enviar para o banco de dados?

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 25 de outubro de 2017 13:42
  • O problema que a aplicação não é minha e sim der terceiros.
    quarta-feira, 25 de outubro de 2017 13:50
  • Boa tarde, Cleber_G.

    Nesse caso, não seria melhor você falar com os responsáveis pelo sistema?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 26 de outubro de 2017 12:38
    Moderador
  • Cleber_G , o mundo ideal e que isso fique na aplicação, mas se nada disso for possivel,

    veja esse exemplo bem simples que pode te ajudar 

    CREATE TABLE [dbo].[Pessoas]
    (
    [IdPessoa] [uniqueidentifier] NOT NULL  DEFAULT (newsequentialid()),
    [Nome] [varchar] (100) COLLATE Latin1_General_CI_AI NULL,
    [NomePai] [varchar] (100) COLLATE Latin1_General_CI_AI NULL,
    [NomeMae] [varchar] (100) COLLATE Latin1_General_CI_AI NULL
    )
    

    2) criando a procedure

    CREATE PROCEDURE InsertPessoas (
    @IdPessoa UNIQUEIDENTIFIER,
    @Nome varchar(100),
    @NomePai varchar(100),
    @NomeMae varchar(100)) 
    as  
    BEGIN
    		
    IF ( OBJECT_ID('TEMPDB..#ValidacaoDados') IS NOT NULL )
        DROP TABLE #ValidacaoDados;	
    
    CREATE TABLE #ValidacaoDados
        (
          IdMensagem INT IDENTITY(1,1),
          Mensagem VARCHAR(100),
    	  Severidade VARCHAR(20)
        );
    
    
    	IF( @IdPessoa IS NULL)
    	BEGIN
    			INSERT INTO #ValidacaoDados
    			VALUES
    			(   'A PK da tabela de pessoas não foi informado', -- Mensagem - varchar(100)
    			    'Alta'  -- Severidade - varchar(20)
    			)
    	END
    
    	IF(@Nome IS NULL OR LEN(@Nome) =0) 
    	BEGIN
    		INSERT INTO #ValidacaoDados
    			VALUES
    			(   'O campo Nome deve ser informado', -- Mensagem - varchar(100)
    			    'Alta'  -- Severidade - varchar(20)
    			)	
    	END
    
    	IF(@NomePai IS NULL OR LEN(@NomePai) =0) 
    	BEGIN
    		INSERT INTO #ValidacaoDados
    			VALUES
    			(   'O campo NomePai deve ser informado', -- Mensagem - varchar(100)
    			    'Baixa'  -- Severidade - varchar(20)
    			)
    			
    				
    	END
    
    	IF(@NomeMae IS NULL OR LEN(@NomeMae) =0) 
    	BEGIN
    		INSERT INTO #ValidacaoDados
    			VALUES
    			(   'O campo NomeMae deve ser informado', -- Mensagem - varchar(100)
    			    'Baixa'  -- Severidade - varchar(20)
    			)
    			
    	END
    
    
    	 IF( NOT EXISTS(SELECT 1 FROM #ValidacaoDados AS vd WHERE vd.Severidade ='Alta'))
    	 BEGIN
    			INSERT INTO dbo.Pessoas
    			(
    			    IdPessoa,
    			    Nome,
    			    NomePai,
    			    NomeMae
    			)
    			VALUES
    			(   @IdPessoa, -- IdPessoa - uniqueidentifier
    			    @Nome,   -- Nome - varchar(100)
    			    @NomePai,   -- NomePai - varchar(100)
    			    @NomeMae    -- NomeMae - varchar(100)
    			) 
    	 END
    
    
    	  SELECT * FROM #ValidacaoDados AS vd
    END

    3) testes 

    EXEC dbo.InsertPessoas @IdPessoa = 'F873AC64-2E76-40D1-B875-4A3BF710A0F4', -- uniqueidentifier
                           @Nome = '',       -- varchar(100)
                           @NomePai = '',    -- varchar(100)
                           @NomeMae = ''     -- varchar(100)

    3) testes

    SELECT * FROM dbo.Pessoas AS p

    3) testes

    EXEC dbo.InsertPessoas @IdPessoa = 'F873AC64-2E76-40D1-B875-4A3BF710A0F4', -- uniqueidentifier
                           @Nome = 'Pessoa A',       -- varchar(100)
                           @NomePai = '',    -- varchar(100)
                           @NomeMae = ''     -- varchar(100)

    Veja como ficou 

    SELECT * FROM dbo.Pessoas AS p


    Wesley Neves - Brasilia-DF

     
    https://wesleyneves.wordpress.com/
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves

    quinta-feira, 26 de outubro de 2017 13:13
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 30 de outubro de 2017 16:12
    Moderador