Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

stored procedures

Estas en el tema de stored procedures en el foro de SQL Server en Foros del Web. Hola a todos mi duda es la siguiente,un stored procedure aunque contenga varias sentencias sql,por ejemplo 3 inserts,se comporta como una unica intruccion al ejecutarse??es ...
  #1 (permalink)  
Antiguo 29/12/2006, 03:43
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 258
Antigüedad: 19 años, 10 meses
Puntos: 0
stored procedures

Hola a todos mi duda es la siguiente,un stored procedure aunque contenga varias sentencias sql,por ejemplo 3 inserts,se comporta como una unica intruccion al ejecutarse??es decir es como si fuera una unica sentencia sql??si alguna de esas sentencias sql que contiene fallase por el motivo que fuese almacenaria el error en @ERROR???si en la 2 sql del stored procedure se cae el servidor,al volver a retomar la conexion se hace automaticamente un rollback???

Esto lo necesito saber,porque estoy haciendo una aplicacion en C# pero donde todas las sentencias sql las realizo con stored procedures,y para cada stored procedure que ejecuto quiero que me devuelva si se ejecuto con exito o no para mostrarlo por pantalla pero no se como hacer esto.

Os pongo un ejemplo simple de lo que estoy haciendo:

CREATE PROCEDURE dbo.EliminarDetallesPedido

@Error int OUTPUT

@IdPedido int

AS

BEGIN

SET @Error = -1;



DELETE FROM dbo.DetallesPedido WHERE IdPedido = @IdPedido;

SET @Error = 0;

END

Con esto que estoy haciendo supongo que si se ejecuta el delete luego la variable @Error se me pondra a 0 con lo cual no hay error,pero que pasa si se produce un error en el delete o se cae el servidor??se ejecuta el SET @Error = 0??si no es asi se hace automaticamente un rollback??

Gracias.
__________________
Inmuebles de Galicia:www.inmueblevirtual.net
Compartir piso en Galicia:www.inmueblevirtual.net/foro
  #2 (permalink)  
Antiguo 29/12/2006, 10:02
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: stored procedures

Que tal Bananas.

Para agrupar un serie de sentencias SQL y hacer todas o ningúna las "encerramos" en una transacción, por ejemplo:

Código:
BEGIN TRAN
    INSERT....
    INSERT....
    DELETE...
COMMIT TRAN
Una vez que abres un BEGGIN TRAN las setencias serán "ejecutadas" hasta que se encuentre con un COMMIT TRAN.

Ahora bien, si quieres regresar un valor de si se ejecutaron o no las sentencias, podemos hacer los siguiente:

Código:
BEGIN TRAN
INSERT....
IF @@ERROR = 0 --No hubo error
BEGIN
  INSERT....
  IF @@ERROR <> 0 -- No hubo Error
  BEGIN
     DELETE  ...
     IF @@ERROR <> 0 -- No hubo Error
     BEGIN
      COMMIT TRANS-- Aceptamos las 3 sentencias y cerramos la transacción.
      @Error = -1
     END
     ELSE
     BEGIN
      ROLLBACK TRAN
      @Error = 0
     END
  END     
  ELSE
  BEGIN
    ROLLBACK TRAN
   @Error = 0
  END
END
ELSE
BEGIN
 ROLLBACK TRAN
 @Error = 0
END
Lo anterior esta un poco enrredado, pero de momento no se me ocurre otra, de cualquier forma es solo una idea.

@@ERROR.- Es una variable de SQL Server que te indica si en la última sentencia hubo un error, sino hubo error tiene un valor de cero.

Este es un tema muy amplio, de todos modos dos las palabras claves a buscar son: @@ERROR, BEGIN , COMMIT, ROLLBACK.

Saludos y suerte!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:30.