You are on page 1of 5

Page 1 of 5

SqlPsykrest If you think you can do IT!, The Transact SQL blog * INICIO * Autor [SQL] Procedimiento almacenado para Insertar datos con transaccin y control de errores. i 19 Votes Quantcast Hola amigos, en muchas ocasiones no sabemos si estamos realizando correctamente un proceso de insercin, actualizacin o eliminacin de datos a una tabla(s), esto para muchos es sumamente sencillo, pero me di a la tarea de preparar un pequeo ejemplo de esto. El script de T-Sql consiste en realizar un procedimiento almacenado que reciba los datos necesarios para insertarlos en la tabla, para garantizar la ejecucin correcta de las inserciones utilizo las transacciones *Transact SQL* y para validar la reversin de la transaccin en caso de que ocurra un *ERROR* utilizo el control de Errores *Try Catch *con*RollBack*. *Qu es una Transaccin?* Una transaccin es un conjunto de operaciones T-SQL que funcionan como un solo bloque de instrucciones, esto significa que si ocurre un fallo durante la ejecucin de alguna instruccin del bloque todas las dems fallaran, lo que implica que nada ms se ejecutara y la transaccin tendr que deshacer todo lo que haba ejecutado hasta donde ocurri el fallo, a eso se la llama reversin de la transaccin y se ejecuta con un *ROLLBACK, *en caso de una ejecucin correcta se tendr que grabar la transaccin con *COMMIT*, el objetivo de las transacciones es garantizar que los datos que se inserten, actualicen o eliminen queden *CONSISTENTES* en la base de datos. Despus de una ligera explicacin de las Transacciones veremos el siguiente ejemplo de una insercin dentro de un procedimiento almacenado con transaccin. *Definiendo las estructuras.* *1. *La estructura del SP es: CREATE PROCEDURE nombreProdedimiento -- Parmetros del SP @Param1 AS Varchar(25), @Param2 AS Bigint . . . AS BEGIN -- Insertar bloque de instrucciones a ejecutar. /* SELECT UPDATE INSERT DELETE Lo que quieras.... */ END GO *2. *La estructura del control de errores TRY-CATCH es: Begin Try /*Bloque de instrucciones a validar. ----------------------------------------- ---------------------------------------- -----------------------------------------*/ End Try Begin Catch /*Bloque de instrucciones que se ejecutan si ocurre un ERROR. ----------------------------------------- ---------------------------------------- -----------------------------------------*/ End Catch *3. *La estructura de una Transaccin es: Begin Tran NombreTransaccion--Inicio de la transaccin con su nombre Tadd o el que elijas. /*Bloque de instrucciones a ejecutar en la Transaccin --------------------------------------- --------------------------------------*/ Commit Tran NombreTransaccion--Confirmacin de la transaccin. Rollback Tran NombreTransaccion--Reversin de la transaccin. *4. *Para finalizar veremos todo lo anterior armado ya en conjunto de SP, Transaccin y control de Errores. -============================================= -- Author: Ivan Rangel Cuadros. -Create date: 22/Ene/2009 -- Description: Procedimiento para Insertar registros en una Tabla con transaccin y control de errores. -- ============================================= CREATE PROCEDURE spAgregaUsuario @nom AS VARCHAR(50), @ape AS VARCHAR(50), @ema AS VARCHAR(30), @pas AS VARCHAR(20), @idJer AS BIGINT, @msg AS VARCHAR (100) OUTPUT AS BEGIN SET NOCOUNT ON; Begin Tran Tadd Begin Try INSERT INTO dbo.USUARIO_SYS (nombre, apellidos, email, pass, fecha_add) VALUES (@nom, @ape, @ema, @pas, GETDATE()) INSERT INTO dbo.USUARIO_JERARQUIAS_SYS (id_usuario, id_jerarquia) VALUES (@@IDENTITY, @idJer) SET @msg = 'El Usuario se registro correctamente.' COMMIT TRAN Tadd End try Begin Catch SET @msg = 'Ocurrio un Error: ' + ERROR_MESSAGE() + ' en la lnea ' + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.' Rollback TRAN Tadd End Catch END GO * * *Explicando el procedimiento:* *1.* Recibe los datos a travs de *parmetros* de los cuales uno es de salida *OutPut* , que servir para indicar si la Insercin se realizo correctamente o no. *2. *Crea una transaccin llamada Tadd, valida con *TRY-CATCH* las inserciones a las tablas *USUARIO* y*USUARIO_JERARQUIAS*. *3. *Si las operaciones de insercin se ejecutan correctamente las confirma con *COMMIT TRAN Tadd* y regresa la variable *@msg* con un valor de confirmacin correcto, si ocurre un error se revierte la transaccin con *ROLLBACK TRAN Tadd* y devuelve en *@msg *un valor de error*.* *Ejecutando el Procedimiento:* DECLARE @msg AS VARCHAR(100); EXEC spAgregaUsuario 'Claudia','Perez Torres','clau@mail.com','a220109',1,@msg OUTPUT SELECT @msg AS msg *Mensaje de insercin correcta:* image *Mensaje de Error en la Transaccin:* image votaPorMiBlogIvan Apyame votando aqu: http://blogit.ms/TopBloggers.aspx

file://C:\Documents and Settings\Administrador\Escritorio\[SQL] Procedimiento almacen ... 31/05/2013

Page 2 of 5

en la categora SQL Server. Los pasos para votar estn aqu te llevara 3 min:* **Clic Aqu* *.* Espero les sea de ayuda. Dejen comentarios!!! Etiquetas de Technorati: SQL ,SQL 2005 ,Procedimeintos almacenados ,Trasacciones ,T-SQL ,TSQL ,Control de errores ,TryCatch ,Transact SQL ,Store Procedure About these ads Me gusta: Me gusta Cargando... 2009 01/22 Categora SQL ETIQUETAS Control de errores Procedimeintos almacenados SQL SQL 2005 Store Procedure T-SQL Transact SQL Trasacciones Try-Catch TSQL Write comment <#respond> * Write comment <#respond> * RSS de los Comentarios * Trackback ( 0 ) * Comentarios ( 39 ) 1. * Emmanuel Vilchis * 22/01/09 * RESPONDER * Cita Amigo Tin tin me da gusto ver que ocupas tu tiempo para algo productivo. Me lati tu idea de hacer este blog, sigue as amigo vas por buen camino 2. * psykrest * 23/01/09 * RESPONDER * Cita Si mi buen amigo esa es la idea contribuir con algunos conocimientos acerca de lo que ms me agrada hacer, saludos seguimos en contacto. 3. * Juan * 11/04/09 * RESPONDER * Cita hola, me da un error cuando compruebo la sintaxis. es el siguiente: Incorrect sintax near try y el otro error es: ERROR_NAME no es un nombre de funcion reconocido. 4. * psykrest * 13/04/09 * RESPONDER * Cita Hola Juan, en que versin de SQL server estas trabajando, debes de asegurarte que sea 2005 o 2008, de lo contrario SQL 2000 no soporta la instruccin TRY CATCH, de ERROR_NAME no es correcto, escribe ERROR_MESSAGE, verifica que estas escribiendo en el orden correcto las instrucciones, no deberias de tener mayor problema, espero me informes si ya se soluciono el problema, Saludos. 5. * erika * 21/05/09 * RESPONDER * Cita =s, yo tenia el mismo error que juan.. jeje ya lo habia eliminado , pero en realidad desconocia el porque no lo reconocia. Ahora lo se gracias =) , pero ERROR_MESSAGE sigue sin funcionar trabajo con sql 2000 mi codigo: BEGIN SET NOCOUNT ON; DECLARE @msg AS VARCHAR(100), @APE_PAT AS VARCHAR(50), @APE_MAT AS VARCHAR(50), @NOMBRE AS VARCHAR(30), @EMPRESA AS VARCHAR(50), @DEPTO AS VARCHAR(50), @PUESTO AS VARCHAR(50), @TEL_OFI AS VARCHAR(18), @TEL_MOV AS VARCHAR(18), @CORREO AS VARCHAR(50), @COMENT AS NTEXT, @USUARIO AS VARCHAR(40), @PASSWRD AS VARCHAR(40), @FECHALT AS SMALLDATETIME, @USU_ROL AS VARCHAR(50) Begin TRAN TAGREGAR INSERT INTO CC_USUARIO(APEPAT, APEMAT, NOMBRE, EMPRESA, DEPTO, PUESTO, TELOFI, TELMOV, CORREO, COMENT, USUARIO, PASSWRD, FECHALT, USU_ROL) VALUES (@APE_PAT, @APE_MAT, @NOMBRE, @EMPRESA, @DEPTO, @PUESTO, @TEL_OFI, @TEL_MOV, @CORREO, @COMENT, @USUARIO, @PASSWRD, GETDATE(), @USU_ROL) SET @msg = El Usuario se registro correctamente. COMMIT TRAN TAGREGAR Begin SET @msg = Ocurrio un Error: + ERROR_MESSAGE() + en la lnea + CONVERT(NVARCHAR(255), ERROR_LINE() ) + .; Rollback TRAN TAGREGAR End END 6. * flex * 22/05/09 * RESPONDER * Cita Bueno recien me inicio en esto de los STP, la pregunta es como defino una insercion donde debo guardar un pedido y su detalle completo? Como paso los datos por param en el STP (especialmente el detalle de Pedido)? 7. * Angie * 24/05/09 * RESPONDER * Cita Tengo una consulta: Necesito insertar datos en un procedimiento almacenado a una tabla, entre uno de ellos debo insertar el mail, y en el caso de que se ingrese el mismo mail de nuevo el proceso debe rechazarlo, cmo se podra hacer? Espero su respuesta, saludos y gracias 8. * psykrest * 26/05/09 * RESPONDER * Cita Hola Angie, lo que me describes lo haces perfectamente con la instruccin EXISTS , te dejo un breve ejemplo: IF EXISTS ( SELECT id FROM DEMO_USUARIO WHERE email = @email ) BEGIN @msg = El Usuario ya se encuantra registrado!!! END ELSE BEGIN INSERT INTO DEMO_USUARIO () VALUES () @msg = El usuario se registro correctamente. END Ten en cuenta que @email es un variable de tipo parmetro (que trae como valor el correo a insertar y validar), el parmetro @msg que para mi punto de vista ser de tipo OUTPUT y es el que retorna tu Procedimiento almacenado para indicar al usuario si se realiz la accin o no, espero te sea de ayuda, saludos y suerte. 9. * psykrest * 26/05/09 * RESPONDER * Cita Saludos Flex, he creado un Post donde comparto una manera para planear (estructurar) y crear sus Procedimientos almacenados, te dejo el enlace por que creo que cubre con gran parte de la pregunta que me hiciste. [SQL] Como planear un Procedimiento almacenado en SQL Server 2008 (Creacin y ejecucin). 10. * JaMeS * 3/06/09 * RESPONDER * Cita De mucha utilidad, te

file://C:\Documents and Settings\Administrador\Escritorio\[SQL] Procedimiento almacen ... 31/05/2013

Page 3 of 5

agradezco muy buen post 11. * joaan * 25/10/09 * RESPONDER * Cita oie qiero agregar un dato x default en mi caso la fecha como le ago? 12. * Edison * 8/02/10 * RESPONDER * Cita No he probado aun tus cdigos pero dime se puede conectar SQL 2005 con V BASIC 6.0 ? y si es posible (creo que si) cual es la solucin para agregar datos desde mis caja de textos en la tabla de mi base de datos 13. * ezequiel * 4/03/10 * RESPONDER * Cita hola queria saber si cuando usas try catch porq ejempo puedo hacer lo siguiente begin try - - - - end try if (condicion) begin cath _ - - end catch se puede ??? 14. * pocholo * 25/03/10 * RESPONDER * Cita hola psykrest, como puedo traer el mensaje a otra aplicacion, por ejemplo visual basic 6.0 estoy utilizando sql server 2000, atento a tus comentarios, gracias 15. * lp312 * 23/04/10 * RESPONDER * Cita Muchas gracias por tus aportes al compartir esta informacion 16. * psykrest * 24/04/10 * RESPONDER * Cita Oops, perdon por no contestar antes, mira a mi opinion deberia de utilizar Servicios Web que se conecten a tu Base de datos y a su vez estos mismos servicios se comuniquen con tu aplicacin de escritorio, de esta manera puedes enviar datos a la base o recibirlos en tu aplicacin a travez de dichos web services, una disculpa por la demora, pero el trabajo no me deja seguir con el blog, saludos 17. * psykrest * 24/04/10 * RESPONDER * Cita Hola, perdon por la demora, pero ya sabes que primero esta el trabajo, lo que comentas claro que se puede hacer, mira: dentro de tu bloque: Begin Try Declare @param1 nvarchar(150) IF EXISTS(SELECT * FROM LOQUESEA WHERE id = 1000) BEGIN SET @param1 = S existe END ELSE BEGIN SET @param1 = No existe END End Try Saludos y disculpas. 18. * psykrest * 24/04/10 * RESPONDER * Cita Opps perdon por no contestar antes, claro que s se puede conectar, un opcin que considero esque la comunicacin entre tu aplicacin y tu base de datos sea a travez de Servicios Web, de esa manera Anvias datos de los objetos de tu aplicacion al Servicio Web y este se encarga de enviarlos a la base de datos y listo xD. Saludos, esta ms atento al Blog . 19. * Benito Kamelo * 17/02/11 * RESPONDER * Cita Excelentes ejemplo de SP. AHora tengo una idea mas clara de los que hacen. 20. * john * 21/09/11 * RESPONDER * Cita necesito saber cual es el motivo del error en mi base de datos,ya revise todo y el procedimiento de insertar email me manda error estoy utilizando sql 2008 21. * psykrest * 12/10/11 * RESPONDER * Cita Hola, prueba hechando un vistazo al Monitor de Actividades del SQL Server, Cual es el numero del error o el mensaje? Ivan 22. * Dirson Andres * 31/10/11 * RESPONDER * Cita muy bacano gracias a todos 23. * Vanesa Percy * 29/11/11 * RESPONDER * Cita Hola Oye y tu tienes el procedimiento almacenado con transaccin para modificar registros? Si lo tienes por favor publicalo 24. * psykrest * 29/11/11 * RESPONDER * Cita Hola, Solo reemplaza los INSERTS por los UPDATES que quieres hacer: Reemplazar: INSERT INTO dbo.USUARIO_SYS (nombre, apellidos, email, pass, fecha_add) VALUES (@nom, @ape, @ema, @pas, GETDATE()); INSERT INTO dbo.USUARIO_JERARQUIAS_SYS (id_usuario, id_jerarquia) VALUES (@@IDENTITY, @idJer); Por: UPDATE dbo.USUARIO_SYS SET nombre = @nom, apellidos = @ape, email = @ema, pass = @pas WHERE id = @id; UPDATE dbo.USUARIO_JERARQUIAS_SYS SET id_jerarquia = @newIdJer WHERE id_usuario = @id AND id_jerarquia = @oldIdJer; Saludos y suerte.Ivan 25. * jimico * 9/12/11 * RESPONDER * Cita Hola,que tal,estoy empezando con sql,esta nuy bueno el post y el blog. una felicitacion. 26. * Argelin * 12/12/11 * RESPONDER * Cita Excelente, me funciono a la perfeccion. Ahora me asigne la tarea de reutilizarlo para modificar y borrar registros. Gracias.. 27. * Argelin * 12/12/11 * RESPONDER * Cita Me funcion cambiando los Insert por update para modificar registros.. Ahora solo me falta, trabajar en los WebForms para EJECUTAR el procedure y pasarle los TextBox a los parametros y los Parametros a los campos.. Esa tarea no se como la realizare, si alguien tiene un ejemplo.. Mi correo es: argelyn3@hotmail.com Gracias de antemano. 28. * Jose * 19/12/11 * RESPONDER * Cita En q lenguaje estas trabajando argelin? 29. * sussanitta * 14/02/12 * RESPONDER * Cita Hola, me gustaria si me pudieras ayudar tengo una tabla ejemplo: tbRequisitos idReq int nom_req nvarchar desc_req nvarchar y otra tabla tbControl_Requisitos idCtrol_Req INT idActividad INT idReq INT Statu INT quiero copiar los registro que tenga en la tabla tbRequisitos, en la tbControl_Requisito, pero solo idReq int. Se supone que ya existen dato en la tabla tbRequisitos. IdReq nom_req desc_req 1 Acta Nacimeinto Original y Copia 2 Requsiito 2 Desc2 3 Requsiito 3 Desc3 4 Requsiito 4 Desc4 5 Requsiito 5 Desc5 6 Requsiito 6 Desc6 Quiero que cuando se genere un registro en la tbActividades, se llene

file://C:\Documents and Settings\Administrador\Escritorio\[SQL] Procedimiento almacen ... 31/05/2013

Page 4 of 5

automaticamente esta tabla con el idActividad (generado) y copie los idReq existentes algo asi como un ciclo y vaya leyendo e insertando pero no se como hacerlo. idCtrol_Req idActividad idReq Statu 11 4 1 7 12 4 2 7 13 4 3 7 14 4 4 7 15 4 5 7 16 4 6 7 30. * Alex Sanyago * 13/03/12 * RESPONDER * Cita Exelente blog!!! 31. * loco * 22/03/12 * RESPONDER * Cita Desde vb.net 2010 estoy llamando a un procedimiento , como hago para que este me coja el error y avise al usuario que se ah producido un error y no se ah llevado a cabo el stored procedure. Gracias 32. * Ivan * 17/05/12 * RESPONDER * Cita Buen blog; quisiera que me ayudes, tengo un problema al tratar de ingresar datos en dos tablas relacionadas, pues una de mis tablas tiene un Foreign Key de la otra tabla, lo que quiero es ingresar datos desde un solo formulario a estas tablas relacionadas con un solo procedimiento almacenado, espero que me ayudes. y saludos 33. * psykrest * 17/05/12 * RESPONDER * Cita Hola, es muy sencillo, lo que tienes que hacer es crear un Store Procedure, dentro de este deberas de insertar en la tabla principal, recuperar el ltimo ID, he insertar en la segunda table, ie. DECLARE @lastId bigint; INSERT INTO MyTable1(field1, field2, created) VALUES(dato1, dato2, getdate()); RECUPERAMOS EL ID DEL LTIMO REGISTRO INSERTADO EN MyTable1 SET @lastId = SCOPE_IDENTITY(); PROCEDEMOS A INSERTAR EN LA SIGUIENTE TABLA, QUE CONTIENE LA RELACIN (MyTable2), para este caso la FK es MyTable1ID ;. INSERT INTO MyTable2(MyTable1ID, field1, field2, field3) VALUES(@lastId,dato1, dato2, dato3); LISTO!!! 34. * David Cardenas * 15/08/12 * RESPONDER * Cita Hola felicitaciones por el tuto, una pregunta si quiero mostrar el mensaje de insersion o error en un formulario (pantalla de usuario), como lo haria, estoy buscando esa info y no logro encontrar, q al llamar al sp, obtenga un valor q le diga al usuario si grabo bien o no. mil gracias 35. * roy * 30/12/12 * RESPONDER * Cita oye mil gracias pero nos ayudas a dispararlo desde vb .net 36. * joe07 * 30/01/13 * RESPONDER * Cita Amigo buenas tardes desde Mexico, tu post esta increible pero al igual que Roy me ayudarias muchisimo si nos mostraras la forma de ejecutarlo desde VB.net mil gracias por tu aporte y tu ensenanza, saludos. 37. * gifiv * 2/02/13 * RESPONDER * Cita hola amigos, saludos desde Per, me encanto el post y es excelente, lo que quisiera es saber como capturar el ,@msg desd c# 38. * dfss * 6/03/13 * RESPONDER * Cita disculpa amigo como llamo a un procedimiento almacenado desde un trigger saludos 39. * Pablo * 15/05/13 * RESPONDER * Cita Buen ejemplo, como complemento hubiera sido mejor el mostrar las tablas. TrackBack URL 1. An no hay trackbacks Deja un comentario Cancelar respuesta Introduce tus datos o haz clic en un icono para iniciar sesin: * <#comment-form-guest> * <#comment-form-loadservice:WordPress.com> * <#comment-form-load-service:Twitter> * <#comment-form-loadservice:Facebook> Gravatar Correo electrnico (obligatorio) (La direccin no se har pblica) Nombre (obligatorio) Sitio web Logo de WordPress.com ** Ests comentando usando tu cuenta de WordPress.com. ( Cerrar sesin / Cambiar <#> ) Imagen de Twitter ** Ests comentando usando tu cuenta de Twitter. ( Cerrar sesin / Cambiar <#> ) Foto de Facebook ** Ests comentando usando tu cuenta de Facebook. ( Cerrar sesin / Cambiar <#> ) Cancelar Conectando a %s Recibir siguientes comentarios por correo. Informacin Cambiar esta frase y el ttulo de la pgina Tema admin opcin. RSS FEED Sgueme en Twitter!!! * Arreglen los baches de la calle Revolucin rumbo Hacienda del Valle 2 (pasando el puente del rbol),esta horrible la calle,no es posible >.< 9 months ago * Always have your stuff when you need it with @Dropbox . Sign up for free! db.tt/S5p6DyK1 10 months ago * Debuta Facebook en Wall Street netmedia.info/newsletter/201 1 year ago * Creci el nmero de internautas en Mxico netmedia.info/ultimas-notici 1 year ago * Telcel elimina sus planes de Internet ilimitado ; cobrar por megabyte netmedia.info/ultimas-notici 1 year ago Stadisticas del Blog * 314,623 Visitas RSS SqlPsyKrest en RSS * TIP Para conectar SQL Server 2008 (No R2) con Windows Azure. * No puedo ver la propiedades de mis Proyectos en Visual Studio 2008 * [ASP.NET] Error del Servidor en Aplicacin: Error HTTP 404.3-Not Found. * [SQL2008] Cmo instalar MS SQL Server 2008? * [SQL2008] Reduciendo el almacenamiento para columnas Nulas SPARSE Columns. Posts recientes * TIP Para conectar SQL Server 2008 (No R2) con Windows Azure. * No puedo ver la propiedades de mis Proyectos en Visual Studio 2008 * [ASP.NET] Error del Servidor en Aplicacin: Error HTTP 404.3-Not Found. * [SQL2008] Cmo instalar MS SQL Server 2008? * [SQL2008] Reduciendo el almacenamiento para columnas Nulas SPARSE Columns. Archivos *

file://C:\Documents and Settings\Administrador\Escritorio\[SQL] Procedimiento almacen ... 31/05/2013

Page 5 of 5

octubre 2011 (1) * junio 2010 (1) * octubre 2009 (3) * septiembre 2009 (3) * agosto 2009 (2) * julio 2009 (5) * junio 2009 (4) * mayo 2009 (5) * abril 2009 (4) * marzo 2009 (7) * febrero 2009 (7) * enero 2009 (6) * octubre 2008 (1) Posts Ms Vistos * [SQL] Procedimiento almacenado para Insertar datos con transaccin y control de errores. * [SQL] Por qu utilizar Tablas Temporales Locales, Globales o Variables de Tabla?. * [SQL 2008] Insertar mltiples filas con valores (Nuevo). * [SQL] Como planear un Procedimiento almacenado en SQL Server 2008 (Creacin y ejecucin). * [VS 2008ASP NET] Crear una cadena de conexin en ASP .NET y ejecutar un comando a una BD de SQL Server 2008. Blogroll * Blog de Tecnologas .NET. * WordPress.com * WordPress.org Etiquetas ASP Net y Base de datos. Base de datos Bases de datos de ejemplo Bienvenid@s Control de errores Correo electrnico desde SQL Server Correos de prueba desde SQL. correos HTML con SQL 2005 data bases date functions DELETE Emails desde SQL 2005 Envio de correos SQL FK Foregin Keys FOR XML funciones de fecha SQL Guardar cambios en tablas INSERT Llaves forneas Procedimeintos almacenados Reiniciar llave primaria SELECT SELECT FOR XML sp_send_dbmail SQL SQL 2005 SQL 2008 SQL DATE SQL Mail SQL Server SQL Server 2005 SQL XML SQL XML 2005 Store Procedure T-SQL Tablas SQL Transact SQL Trasacciones Try-Catch TSQL TSQL Mail UPDATE Visual Studio XML Top Clicks * sqlpsykrest.files.wordpre * blogit.ms/TopBloggers.asp * msftdbprodsamples.codeple * sqlpsykrest.files.wordpre * sqlpsykrest.files.wordpre enero 2009 L M X J V S D oct feb 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Comentarios recientes Luis on [SQL] Cifrando un Procedimient Yoake on [VS 2008ASP NET] Crear Pablo on [SQL] Procedimiento almacenado Programmer2013 on [SQL] Por qu u Sql Server + VB | bA on [SQL] Como planear un Procedim De donde me visitan. Locations of visitors to this page Pginas * Autor Blog de WordPress.com . | Tema monochrome por mono-lab . <#wrapper> Seguir Follow SqlPsykrest Recibe cada nueva publicacin en tu buzn de correo electrnico. Ofrecido por WordPress.com %d bloggers like this:

file://C:\Documents and Settings\Administrador\Escritorio\[SQL] Procedimiento almacen ... 31/05/2013