Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-05-2010
molusco molusco is offline
Registrado
 
Registrado: may 2010
Posts: 1
Poder: 0
molusco Va por buen camino
Transaciones en Stored Procedure

Hola amigos.

Estoy empezando el mundo delphi 7 y con base de datos sql2000

Tengo una tabla donde dos columnas de ellas forma un index unico: (serie, numero)

He creado la siguiente SP, para hacer una pruebas.


Código SQL [-]
CREATE PROCEDURE insert_tab
AS
BEGIN
--SET XACT_ABORT ON 
begin TRANSACTION
INSERT INTO dbo.aa_prueba ( serie, numero ) VALUES ( 1, 129 )
if @@error > 0 begin
--print 'bad insert...'
RAISERROR ('Bad insert....',16,1)
rollback TRANSACTION
return -1
END
else begin
print 'Good insert...'
commit TRANSACTION
return 0
end;
END

Por ahora estoy ejecutando el SP con el EMS-SQL
- Cuando ejecuto la primera vez - es todo correcto, incluyendo el mensaje 'Good insert...'
- Cuando doy por una segunda vez ( se sabe que ya existe ese registro ), no me imprime el error 'Bad Insert'...

Pero me emite un error en el mismo EMS-SQL asi:
Infracción de la restricción UNIQUE KEY 'aa_prueba_uq'. No se puede insertar una clave duplicada en el objeto 'aa_prueba'.
Se terminó la instrucción.

El error emitido por el EMS-SQL (que debo suponer que el sql le informa) es correcto... pero necesito que mi stored haga otro tipo de tareas despues del mensaje 'bad error'

Me ayudan?

Molusco
Responder Con Cita
  #2  
Antiguo 07-05-2010
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Quizás éste código te resulte más cómodo
Código SQL [-]
CREATE PROCEDURE dbo.insert_tab(@serie int, @numero int)
AS
BEGIN
  DECLARE
    @existe bit

  SET @existe = 
        (SELECT 
            COUNT(*) 
          FROM aa_prueba 
          WHERE SERIE = @serie 
                AND NUMERO = @numero)
  
  IF (@existe = 0)
  BEGIN
    BEGIN TRANSACTION
    INSERT INTO aa_prueba (SERIE, NUMERO) VALUES (@serie, @numero)    
    PRINT 'Good Insert....'
    COMMIT TRANSACTION
    RETURN 0
  END
  ELSE BEGIN
    RAISERROR('Bad insert....', 16, 1)
    RETURN -1
  END
END
Un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Stored Procedure !!! Ledian_Fdez C++ Builder 0 02-03-2010 14:01:29
Stored Procedure StartKill MySQL 2 27-08-2008 06:18:44
Ayuda con Stored Procedure gluglu Conexión con bases de datos 6 26-09-2007 14:20:53
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33


La franja horaria es GMT +2. Ahora son las 22:20:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi