************************************************************************
Ejemplo Simple de Como utilizar la Instrucción Begin Transaction.
queremos actualizar el Archivo Programa en donde todos los Registros
que en la columna cod_prog=06 lo remplace por xx y enseguida se realiza un
insert
en el Archivo Nivel donde se Observa un Error, tomando en cuenta que la
longitud del campo
cod_prog en el archivo nivel solo debe de ser de longitud 2,es así que en
este ejemplo se obtiene un error.
Para Saber si ocurrió un Error se Utiliza La Variable Global @@Error=0 es
por que no ha ocurrido ningún error
**********************************************************************+
begin transaction
update programa set cod_prog='xx' where cod_prog='06'
insert into nivel(cod_prog,cod_niv,nom_niv)
values("xxxx","01","dddddddddddddd")
if @@error <> 0
begin
rollback transaction
return
end
commit transaction
************************************************************************
Store Procedure que permite insertar un nuevo Alumno
Recibe los valores de cada campo como parametro, menos el Codigo
del alumno pues este se autogenera en el Procedimiento
notese que tambien utilizamos la Instrucción Begin Transaction
************************************************************************
create Procedure Sp_Ins_Alu
@Nombre nvarchar(40),
@Direccion nvarchar(30),
@Telefono char(8),
@Fecha_Naci smalldatetime,
@Sexo bit
as
declare @cont integer
declare @codigo char(6)
begin transaction
update parametro set valor=valor+1,@cont=valor+1 where campo='Cod_alum'
if @@error<>0
begin
rollback transaction
return -1
end
set @codigo="A"+right('00000'+convert(varchar(4),@cont),5)
insert into alumnos(cod_alum,nombre,direccion,telefono,fecha_naci,sexo)
values(@codigo,@nombre,@direccion,@telefono,@fecha_naci,@sexo)
if @@error<>0
begin
rollback transaction
return -1
end
commit transaction
return
Comentarios sobre la versión: Versión 1 (3)
set @serror1=@@error y al final pregunto si if (@serrorr1+@serror2+@serror3)>0 hago un roll esto me evita mucho trabajo con los if espero que lo tomes en cuenta