Transacciones en Sql Server 2000

Quisiera hacerle la siguiente consulta, tendrá a la mano algún ejemplo de uso de transacciones que estén dentro de un procidimiento almacenado el cual involucre la inserción en la tabla boleta y la inserción de varias filas en la tabla detalle_boleta, si tuviera la sintaxis exacta de como hacer esto sería excelente, por favor quedo a la espera de su pronta respuesta.

1 respuesta

Respuesta
1
La verdad no tengo pero es muy sencillo acer algo así, mira para eso
Tienes tu tabla:
Boleta
Detalle_Boleta
Temporal_Detalle
La ultima tabla tiene que tener la misma estructura que la tabla detalle ahora tu inserta normal como si insertaras en Boleta,... en la temporal UNO a Uno,
Al final que esta lleno el detalle de la temporal vaceas todo el contenido de la temporal en la Detalle_Boleta para ello usas un Insert Select
Inser into Detalle_Boleta Select * from Temporal_Detalle
Ese insert seelect y la temporal son la clave para acer detalles como los tuyos
Hola experto, tal vez no me explique muy bien cual es mi duda, a continuación adjunto un código de uso de transacciones el cual esta en un procedimiento almacenado,
este SP realiza la inserción de un Cliente con su respectiva Ubicación, para ello primero se realiza la inserción en la tabla UBICACIONES y luego en la tabla CLIENTES
*********
CREATE PROCEDURE PAT_INSERTAR_CLIENTE_NATURAL_Y_UBICACION
@id_ubi int output,
@departamento_ubi varchar(50),
@provincia_ubi varchar(50),
@distrito_ubi varchar(50),
@direccion_ubi varchar(50),
@referencia_ubi varchar(50),
@id_clie_nat int output,
@nombre_clie_nat varchar(50),
@apellido_clie_nat varchar(50),
@dni_clie_nat varchar(50),
@telefono_fijo_clie_nat varchar(50),
@telefono_movil_nextel_clie_nat varchar(50),
@telefono_movil_movistar_clie_nat varchar(50),
@telefono_movil_claro_clie_nat varchar(50)
AS
DECLARE @ERROR INT
BEGIN TRANSACTION
insert into ubicaciones (departamento_ubi,provincia_ubi,distrito_ubi,direccion_ubi,referencia_ubi)
values (@departamento_ubi,@provincia_ubi,@distrito_ubi,@direccion_ubi,@referencia_ubi)
set @id_ubi=@@identity
set @error=@@error
if (@error<>0) goto tratarerror
insert into clientes_naturales (nombre_clie_nat,apellido_clie_nat,dni_clie_nat,telefono_fijo_clie_nat,telefono_movil_nextel_clie_nat,telefono_movil_movistar_clie_nat,telefono_movil_claro_clie_nat,ubi_id_ubi)
values (@nombre_clie_nat,@apellido_clie_nat,@dni_clie_nat,@telefono_fijo_clie_nat,@telefono_movil_nextel_clie_nat,@telefono_movil_movistar_clie_nat,@telefono_movil_claro_clie_nat,@id_ubi)
set @id_clie_nat=@@identity
if (@error<>0) goto tratarerror
commit transaction
tratarerror:
if @@error<>0
begin
print 'ha ecorrido un error. abortamos la transacción'
rollback transaction
end
go
*********** 
Por si acaso este SP es llamado desde VB6 y al llamar al método que contiene al SP le paso todos los parámetros así:
.Insertar_Cliente_Natural_Y_Ubicacion(Trim(txtNombres.Text), _
Trim(txtApellidos.Text), Trim(txtDni.Text), Trim(txtTelefonoFijo.Text), _
Trim(txtTelefonoNextel.Text), Trim(txtTelefonoMovistar.Text), _
Trim(txtTelefonoClaro.Text), Trim(cboDepartamento.Text), _
Trim(cboProvincia.Text), Trim(cboDistrito.Text), Trim(txtDireccion.Text), _
Trim(txtReferencia.Text))
-En mi diseño de base de datos la relación entre la tabla UBICACIONES y CLIENTES_NATURALES es de 1 a 1 es por eso que los parámetros que corresponden a ambas entidades los paso en una sola vez, pero considerando que hubiera una relación de 1 (CLIENTE_NATURAL) a MUCHAS UBICACIONES, que cambios haría en mi SP, desde luego usando transacciones, Como hago para que se inserte los datos en la tabla CLIENTE y varios datos en la tabla UBICACIÓN, es casi la misma forma como tener la inserción UNA VEZ en la tabla BOLETA y MÁS DE UNA inserción en la tabla Detalle_Boleta, por favor estoy con estaa duda hace tiempo y no logro solucionarlo si me pudieras ayudar te lo agradecería, gracias por su tiempo y quedo a la espera de su respuesta.
Hola paisano, tal vez no te llegó mi consulta, quedo a la espera de tu respuesta, gracias.
Oe cholo no entiendo mucho pero ten por seguro que si te podre ayudar agrégame [email protected] pones mucho floro y nada concreto jaja, normal agrégame y te ayudo diempre paro en linea
Bye maestro y no olvides finalizar la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas