Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
56Activity
0 of .
Results for:
No results containing your search query
P. 1
Transacciones en SQL

Transacciones en SQL

Ratings:

4.8

(5)
|Views: 5,984 |Likes:
Published by 16460596

More info:

Published by: 16460596 on Jan 02, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC or read online from Scribd
See more
See less

01/14/2014

 
Transacciones en SQL Server 
Autor:
 Cesar Manivesa (manivesa)1 . Introducción2 . Sentencias para una transacción3 . Transacciones anidadas4 . Un par de ejemplos ms! . Transacciones " procedimientos almacenados.Transacciones en S#$ Server %ntre las &a'ilidades de todo Sistema estor de ases de *atos +elaciones tiene ,ue estar la de permitir al pro-ramador crear transacciones.  aun,ue el S#$ Server nos  permite tra'ajar con transacciones de manera sencilla " e/ica0 siempre &a" di/icultades...
Introducción
Una transacción es un conjunto de operaciones ,ue van a ser tratadas como una nica unidad. %stas transacciones de'en cumplir 4 propiedades /undamentales comnmente conocidas como CI* (atomicidad co&erencia asilamiento " dura'ilidad).$a transacción ms simple en S#$ Server es una nica sentencia S#$. or ejemplo una sentencia como esta5
UPDATE Products SET UnitPrice=20 WHERE ProductName ='Chai'
%s una transacción. (Como siempre ejemplos de 6ort&7ind) %sta es una transacción 8autocommit8 una transacción autocompletada. Cuando enviamos esta sentencia al S#$ Server se escri'e en el /ic&ero de transacciones lo ,ue va a ocurrir " a continuación reali0a los cam'ios necesarios en la 'ase de datos. Si &a" al-n tipo de pro'lema al &acer esta operación el S#$ Server puede leer en el /ic&ero de transacciones lo ,ue se esta'a &aciendo " si es necesario puede devolver la  'ase de datos al estado en el ,ue se encontra'a antes de reci'ir la sentencia.or supuesto este tipo de transacciones no re,uieren de nuestra intervención puesto ,ue el sistema se encar-a de todo. Sin em'ar-o si &a" ,ue reali0ar varias operaciones " ,ueremos ,ue sean tratadas como una unidad tenemos ,ue crear esas transacciones de manera e9pl:cita.
Sentencias para una transacción
 
Como dec:amos una transacción es un conjunto de operaciones tratadas como una sola. %ste conjunto de operaciones de'e marcarse como transacción para ,ue todas las operaciones ,ue la con/orman ten-an ;9ito o todas /racasen.$a sentencia ,ue se utili0a para indicar el comien0o de una transacción es 8%I6 T+68. Si al-una de las operaciones de una transacción /alla &a" ,ue des&acer la transacción en su totalidad para volver al estado inicial en el ,ue esta'a la 'ase de datos antes de empe0ar. %sto se consi-ue con la sentencia 8+<$$C= T+68.Si todas las operaciones de una transacción se completan con ;9ito &a" ,ue marcar el /in de una transacción para ,ue la 'ase de datos vuelva a estar en un estado consistente con la sentencia 8C<MMIT T+68.
Un ejemplo
Tra'ajaremos con la 'ase de datos 6ort&7ind en nuestros ejemplos. >amos a reali0ar una transacción ,ue modi/ica el precio de dos productos de la 'ase de datos.
USE NorthWindDECLARE Error int!!Dec"aramos una #aria$"e %ue uti"i&aremos ara a"macenar un osi$"e c(di)o de error*E+,N TRAN!!,niciamos "a transacci(nUPDATE Products SET UnitPrice=20 WHERE ProductName ='Chai'!!E-ecutamos "a rimera sentenciaSET Error=ERR.R!!Si ocurre un error a"macenamos su c(di)o en Error!!/ sa"tamos a" tro&o de c(di)o %ue deshara "a transacci(n Si1 eso de ah es un !!+.T.1 e" demonio de "os ro)ramadores1 ero no asa nada or usar"o!!cuando es necesario,3 4Error5607 +.T. TratarError!!Si "a rimera sentencia se e-ecuta con 89ito1 asamos a "a se)undaUPDATE Products SET UnitPrice=20 WHERE ProductName='Chan)'SET Error=ERR.R!!: si ha/ un error hacemos como antes,3 4Error5607 +.T. TratarError!!Si ""e)amos hasta a%u es %ue "os dos UPDATE se han com"etado con !!89ito / odemos ;)uardar; "a transacci(n en "a $ase de datosC.<<,T TRANTratarError!!Si ha ocurrido a")>n error ""e)amos hasta a%u,? Error560 THEN*E+,NPR,NT 'Ha ecorrido un error A$ortamos "a transacci(n'!!Se "o comunicamos a" usuario / deshacemos "a transacci(n!!todo #o"#er@ a estar como si nada hu$iera ocurridoR.LL*AC TRANEND
 
Como se puede ver para cada sentencia ,ue se ejecuta miramos si se &a producido o no un error " si detectamos un error ejecutamos el 'lo,ue de códi-o ,ue des&ace la transacción.?a" una interpretación incorrecta en cuanto al /uncionamiento de las transacciones ,ue esta 'astante e9tendida. Muc&a -ente cree ,ue si tenemos varias sentencias dentro de una transacción " una de ellas /alla la transacción se a'orta en su totalidad. @6ada ms lejos de la realidadA Si tenemos dos sentencias dentro de una transacción.
USE NorthWind*E+,N TRANUPDATE Products SET UnitPrice=20 WHERE ProductName='Chan)'UPDATE Products SET UnitPrice=20 WHERE ProductName='Chan)'C.<<,T TRAN
%stas dos sentencias se ejecutarn como una sola. Si por ejemplo en medio de la transacción (despu;s del primer update " antes del se-undo) &a" un corte de electricidad cuando el S#$ Server se recupere se encontrar en medio de una transacción " o 'ien la termina o 'ien la des&ace pero no se ,uedar a medias.%l error est en pensar ,ue si la ejecución de la primera sentencia da un error se cancelar la transacción. %l S#$ Server sólo se preocupa de ejecutar las sentencias no de averi-uar si lo &acen correctamente o si la ló-ica de la transacción es correcta. %so es cosa nuestra.or eso en el ejemplo ,ue tenemos ms arri'a para cada sentencia de nuestro conjunto averi-uamos si se &a producido un error " si es as: actuamos en consecuencia cancelando toda la operación.
Transacciones anidadas
<tra de las posi'ilidades ,ue nos o/rece el S#$ Server es utili0ar transacciones anidadas. %sto ,uiere decir ,ue podemos tener transacciones dentro de transacciones es decir podemos empe0ar una nueva transacción sin &a'er terminado la anterior. sociada a esta idea de anidamiento e9iste una varia'le -lo'al BBT+6C<U6T ,ue tiene valor  si no e9iste nin-n nivel de anidamiento 1 si &a" una transacción anidada 2 si estamos en el se-undo nivel de anidamiento. " as: sucesivamente.$a di/icultad de tra'ajar con transacciones anidadas est en el comportamiento ,ue tienen a&ora las sentencias 8C<MMIT T+68 " 8+<$$C= T+68
ROLLBACK TRAN:
 *entro de una transacción anidada esta sentencia des&ace todas las transacciones internas &asta la instrucción %I6 T+6SCTI<6 ms e9terna.
COMMIT TRAN:
 *entro de una transacción anidada esta sentencia nicamente reduce en 1 el valor de BBT+6C<U6T pero no D/inali0aD nin-una transacción ni D-uardaD los cam'ios. %n el caso en el ,ue BBT+6C<U6TE1 (cuando estamos en la ltima transacción) C<MMIT

Activity (56)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
ZuLy Ramos liked this
alboresdominguez liked this
Eduardo CR liked this
julverticona liked this
Susy Beltran liked this
Jorge Alvarez liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->