 |
|
 |
Procedimientos almacenados en Transact SQL
Un procedimiento es un programa dentro de la base de datos que ejecuta una acción o conjunto de acciones especificas.
Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de código.
En Transact SQL los procedimientos almacenados pueden devolver valores (numerico entero) o conjuntos de resultados.
Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.
CREATE PROCEDURE <nombre_procedure> [@param1 <tipo>, ...]AS -- Sentencias del procedure
|
Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE.
ALTER PROCEDURE <nombre_procedure> [@param1 <tipo>, ...]AS -- Sentencias del procedure
|
El siguiente ejemplo muestra un procedimiento almacenado, denominado spu_addCliente que inserta un registro en la tabla "CLIENTES".
CREATE PROCEDURE spu_addCliente @nombre varchar(100), @apellido1 varchar(100), @apellido2 varchar(100), @nifCif varchar(20), @fxNaciento datetimeAS INSERT INTO CLIENTES( nombre, apellido1, apellido2, nifcif, fxnacimiento) VALUES( @nombre, @apellido1, @apellido2, @nifCif, @fxNaciento)
|
Para la ejecutar un procedimiento almacenado debemos utilizar la sentencia EXEC. Cuando la ejecución del procedimiento almacenado es la primera instrucción del lote, podemos omitir el uso de EXEC.
El siguiente ejemplo muestra la ejecución del procedimiento almacenado anterior.
DECLARE @fecha_nacimiento datetimeset @fecha_nacimiento = convert(datetime, '13/05/1975', 103)EXEC spu_addCliente 'Pedro', 'Herrarte', 'Sanchez', '00000002323', @fecha_nacimiento
|
Siempre es deseable que las instrucciones del procedure esten dentro de un bloque TRY CATCH y controlados por una transacción.
ALTER PROCEDURE spu_addCliente @nombre varchar(100), @apellido1 varchar(100), @apellido2 varchar(100), @nifCif varchar(20), @fxNaciento datetimeAS BEGIN TRY BEGIN TRAN INSERT INTO CLIENTES(nombre, apellido1, apellido2, nifcif, fxnacimiento) VALUES(@nombre, @apellido1, @apellido2, @nifCif, @fxNaciento) COMMIT
END TRY BEGIN CATCH ROLLBACKPRINT ERROR_MESSAGE()END CATCH |
Si queremos que los parámetros de un procedimiento almacenado sean de entrada-salida debemos especificarlo a través de la palabra clave OUTPUT , tanto en la definición del procedure como en la ejecución.
El siguiente ejemplo muestra la definición de un procedure con parámetros de salida.
CREATE PROCEDURE spu_ObtenerSaldoCuenta @numCuenta varchar(20), @saldo decimal(10,2) output AS BEGIN SELECT @saldo = SALDO FROM CUENTASWHERE NUMCUENTA = @numCuenta
END |
Y para ejecutar este procedure:
DECLARE @saldo decimal(10,2)EXEC spu_ObtenerSaldoCuenta '200700000001', @saldo outputPRINT @saldo
|
Un procedimiento almacenado puede devolver valores numericos enteros a través de la instrucción RETURN. Normalmente debemos utilizar los valores de retorno para determinar si la ejecución del procedimiento ha sido correcta o no. Si queremos obtener valores se recomienda utilizar parámetros de salida o funciones escalares (se verán mas adelante en este tutorial).
El siguiente ejemplo muestra un procedimiento almacenado que devuelve valores.
CREATE PROCEDURE spu_EstaEnNumerosRojos @numCuenta varchar(20)AS BEGIN IF (SELECT SALDO FROM CUENTAS WHERE NUMCUENTA = @numCuenta) < 0BEGIN RETURN 1ENDELSE RETURN 0
END |
El siguiente ejemplo muestra como ejecutar el procedure y obtener el valor devuelto.
DECLARE @rv intEXEC @rv = spu_EstaEnNumerosRojos '200700000001'PRINT @rv
|
Otra caracteristica muy interesante de los procedimientos almacenados en Transact SQL es que pueden devolver uno o varios conjuntos de resultados.
El siguiente ejemplo muestra un procedimiento almacenado que devuelve un conjunto de resultados.
CREATE PROCEDURE spu_MovimientosCuenta @numCuenta varchar(20)AS BEGIN SELECT @numCuenta, SALDO_ANTERIOR , SALDO_POSTERIOR , IMPORTE , FXMOVIMIENTO FROM MOVIMIENTOSINNER JOIN CUENTAS ON MOVIMIENTOS.IDCUENTA = CUENTAS.IDCUENTAWHERE NUMCUENTA = @numCuentaORDER BY FXMOVIMIENTO DESC
END |
La ejecución del procedimiento se realiza normalmente.
EXEC spu_MovimientosCuenta '200700000001'
|
El resultado de la ejecucion ...
NUMCUENTA SALDO_ANTERIOR SALDO_POSTERIOR IMPORTE FXMOVIMIENTO ------------ -------------- ---------------- ------- ----------------------- 200700000001 50.99 100.99 50.00 2007-08-25 16:18:36.490 200700000001 0.99 50.99 50.00 2007-08-23 16:20:41.183 200700000001 50.99 0.99 50.00 2007-08-23 16:16:29.840 200700000001 0.99 50.99 50.00 2007-08-23 16:14:05.900
|
| |
 |
Excelente
por
Jhonatan
Respuesta recibida el [16/11/2007 09:28:43]
|
 |
Nuevamente me ha resuelto muchas dudas,
|
| |
 |
No tengo palabras para expl...
por
Anónimo
Respuesta recibida el [21/01/2008 11:59:57]
|
 |
No tengo palabras para explicarle , lo emosionante que es encontrar respuesta cuando estas iniciando con los Store Procedure , ustedes saben aclarar ese punto de inquited .....Creo que encontre esa palabra para expresarme Gracias por estar ahiiiiii,,,,,,Yinet
|
| |
 |
Excelente
por
alvaro
Respuesta recibida el [22/02/2008 09:47:41]
|
 |
muy buen trabajo, felicitaciones
|
| |
 |
validaciones
por
Jonatan
Respuesta recibida el [23/02/2008 08:56:51]
|
 |
hola... excelente el tema .. pero me gustaria saber mas como por ejemplo como hago validaciones.. es decir .. cuando kiero ingresar campos.. k haya lineas de codigo y segun el error.. me mande un mensaje de error
|
| |
 |
Gracias ¡Felicidades muy buen articulo!
por
Gerardo
Respuesta recibida el [03/04/2008 03:56:14]
|
 |
Gracias no tenia ni idea de lo que es un procedimiento almacenado, que interesante seguire buscando en la web mas informacion.
|
| |
 |
me salvaron
por
jose
Respuesta recibida el [07/06/2008 01:25:58]
|
 |
estoy haciendo mi practica profesional y la verdad uno de mis punto flojos son los procedimientos almacenados la verdad no tienen idea de cuanto me han ayudado de verdad muchisimas gracias y sigan adelante
|
| |
 |
Millones de Gracias
por
Carlos Vera
Respuesta recibida el [24/07/2008 07:11:47]
|
 |
Pedro Herrarte, estoy seguro que muchos muchachos aligual que se sienten muy agradecidos c0n esta colaboracion, no sabes el gusto que da ayar gente tan capas, de entregar sus conocimientos acia gente que recien se inicia, gracias por todo, Sera por la amabilidad que imagino que en la vida todo te ba muy bien ojala sigas triunfando Bye
|
| |
 |
gracias
por
Luiapo2009
Respuesta recibida el [26/08/2008 06:54:44]
|
 |
simplemente gracias me han ayudado de mucho...:)
|
| |
 |
GRACIAS TOTAL
por
ELFOREY
Respuesta recibida el [16/09/2008 08:49:14]
|
 |
GRACIAS POR TU AYUDA, OJALA NOS VEAMOS ALGUN DIA
|
| |
 |
Lo veo OK
por
Miguel
Respuesta recibida el [24/09/2008 03:12:16]
|
 |
No si te enteras pero creo que vas muy bien con tus anuncios de SQL
|
| |
 |
interasante
por
had
Respuesta recibida el [24/09/2008 08:41:16]
|
 |
gracia por brinda la información y tu colaboracion; espero que sigas adelante...
|
| |
 |
Felicitacion
por
Rubén Ramos
Respuesta recibida el [03/10/2008 10:54:57]
|
 |
Muy agradecido con las consultas y la demas información, excelente explicación.
Saludos Rubén Ramos
|
| |
 |
10 es poco
por
Fernando
Respuesta recibida el [09/10/2008 05:34:10]
|
 |
muy bueno
|
| |
 |
Felicidades
por
Martinez
Respuesta recibida el [31/10/2008 12:52:27]
|
 |
Excelente explicacion, ya que todo lo haces paso a paso lo cual hace que el tema se muy entendible.
|
| |
 |
bien
por
x
Respuesta recibida el [03/11/2008 04:05:05]
|
 |
Si es muy buen soporte para consultar rapidamene la sintaxis, por otro lado el conocimiento puede adquirirse con una bibliografia y todos lo podemos tener...
|
| |
 |
muy buena la explicación
por
julio rojas
Respuesta recibida el [06/11/2008 03:10:05]
|
 |
gracias por hacer que tenga una nocion de lo que es un procedimiento almacenado cuando tenga dudas sobre esto voy a consultarles
|
| |
 |
Muy buen articulo
por
Fabiola
Respuesta recibida el [08/11/2008 10:21:55]
|
 |
Hola... me resulto interesante que hay buenos articulo en esta pagina, sobre todo porq explica de manera clara.. me aclaro muchas dudas..
|
| |
 |
Oigan como ago para pasarle ma...
por
Nieva
Respuesta recibida el [10/11/2008 02:53:07]
|
 |
Oigan como ago para pasarle mas de un parámetro
|
| |
 |
gracias
por
alex
Respuesta recibida el [05/12/2008 08:38:43]
|
 |
vale compadre muy buen ejemplo
|
| |
 |
Gracias
por
PGA
Respuesta recibida el [11/12/2008 08:05:27]
|
 |
El aporte esta muy bueno
|
| |
 |
para: No tengo palabras para expl... por Anónimo
por
mente genial oculta
Respuesta recibida el [29/12/2008 04:49:11]
|
 |
Mira, lo unico que demuestras al expresar tu inquietud, es tu falta de instruccion individual, dependes de los demas, te unes a ellos... Por otro lado para allar la demostracion de que el autor de esta pagina supuestamente es experto se neceista la experiencia para demostrarlo, Esta pagina solo es su negocio, como todo en la vida es dinero y negocio.
|
| |
 |
Pregunta???
por
Luis
Respuesta recibida el [07/01/2009 07:01:07]
|
 |
Es posible que a un procedimiento almacenado, se le envie un arreglo como paramero
|
| |
 |
Procedure
por
Jean David
Respuesta recibida el [04/03/2009 06:14:21]
|
 |
Me gustaria hacer un dataset y un procedure
|
| |
 |
bien
por
orana
Respuesta recibida el [16/03/2009 01:22:42]
|
 |
bien................
|
| |
 |
chido por ti
por
la güera
Respuesta recibida el [01/04/2009 01:50:02]
|
 |
la neta está bien chido este tutorial espero y me sirva para poder pasar con ramon
|
| |
 |
Muy Bueno..
por
Daviloper
Respuesta recibida el [02/04/2009 09:49:20]
|
 |
Muy buena la aportación, brother. esta entendible y bien explicado, me ha servido para poder complementar algo que me faltaba,......muchas gracias,.....y sigue asi,......
|
| |
 |
Excelente
por
maria padilla
Respuesta recibida el [07/04/2009 11:15:13]
|
 |
Excelente explicacion aprendi algo nuevo. Gracias.
|
| |
 |
ESTA MUY BUENO ME SERVIO MUCHO...
por
Anónimo
Respuesta recibida el [24/04/2009 11:55:50]
|
 |
ESTA MUY BUENO ME SERVIO MUCHO EN MI CLASE DE LENGUAJE DE PROGRAMACION Y AHORA EN INGENIERIA del software
|
| |
 |
Bueno...
por
Carolina
Respuesta recibida el [22/05/2009 09:02:01]
|
 |
Me gusto la explicacion... pero me gustaria que se profundice mas...
|
| |
 |
Thanks Thanks Thanks
por
Danny
Respuesta recibida el [01/06/2009 11:02:54]
|
 |
:)
|
| |
 |
Esta muy bueno
por
Fredd
Respuesta recibida el [12/06/2009 12:41:23]
|
 |
Mira fue beneficioso para mi gracias friend
|
| |
 |
Varias cosas
por
Arquimedes
Respuesta recibida el [17/07/2009 11:13:56]
|
 |
1) Gracias, veo que siempre se puede aprender alguna cosilla en la que no habias caido. 2) Por favor, las preguntas en los foros. 3) Los off-topic que no aporten nada y solo protesten, mejor se abstengan y navegue por otros lares de la procelosa red.
|
| |
 |
Muy bien..:)
por
Veonica
Respuesta recibida el [22/07/2009 01:38:10]
|
 |
Felicidaeds me parecio claro y conciso... Asi deberian ser muchso tutoriales
|
| |
 |
CodigoAutogenerado
por
DrInfierno
Respuesta recibida el [30/07/2009 01:24:47]
|
 |
hola amigos, de que manera puedo generar un codigo autogenerado para una tabla, sabiendo que realizo un Store Procedure de Insercion pero sin la llave principal,ya q deseo q esta se genera automaticamente, espero que algun iluminado pueda ayudarme
|
| |
 |
transact sql
por
rafa
Respuesta recibida el [07/09/2009 01:00:13]
|
 |
como puedo mandar parametros desde visual basic net ya que cuando trato de mandar un nombre por ejemplo, jose lopez, toma a jose como un parmetro y a lopez como otro parametro, enla sintasis execute("nombre del procedimiento, parametro1 parametro 2 etc"), como el parametro se manda enstring pues no se puede mandar en una variable, como podria hacerlo? Gracias.
|
| |
 |
Gracias por la ayuda
por
Spidy007
Respuesta recibida el [18/09/2009 11:17:40]
|
 |
Muchos agradecimientos por la forma de plantear el problema de los procedimientos almacenados, esta excelente el tutorial.
|
| |
 |
Default!
por
joan
Respuesta recibida el [22/10/2009 03:59:51]
|
 |
como ago para quando qieroo acer un procedimiento almacenado que me aga poder introducir valores i algunos son x default no puedoo U_U
create procedure Insercion (@Nombre varchar(60), @Descripcion varchar(80), @Existencias int, @Fecha datetime default Getdate()) as insert into Productos(Nombre, Descripcion, Existencias, Fecha) values (@Nombre, @Descripcion, @Existencias, @Fecha)
|
| |
 |
Para Joan
por
Cuadernos Rubio
Respuesta recibida el [29/10/2009 07:57:05]
|
 |
¿Por qué no aprender ortografía en lugar de informática? Y como tu más de la mitad de los que escriben aquí
|
| |
 |
excelente gracias...
por
david
Respuesta recibida el [15/12/2009 04:47:51]
|
 |
excelente gracias
|
| |
 |
Default
por
Cesar
Respuesta recibida el [29/12/2009 04:23:37]
|
 |
create procedure Insercion @Nombre varchar(60), @Descripcion varchar(80), @Existencia int as insert into Productos (Nombre, Descripcion, Existencias, Fecha) values (@Nombre,@Descripcion,@Existencias,Getdate())
|
| |
 |
Muchas gracias
por
Anónimo
Respuesta recibida el [21/01/2010 10:45:22]
|
 |
Gracias, de verdad me sirvio muchisimo, esta muy bien explicado mis felicitaciones GRACIAS
|
| |
 |
felicitaciones
por
hola
Respuesta recibida el [08/02/2010 09:54:21]
|
 |
gracias me ayudaron mucho yo esoty empezando con bd y lenguaje c
|
| |
 |
un pregunta
por
gabriel
Respuesta recibida el [24/02/2010 02:38:57]
|
 |
es muy bueno el aporte q nos mencionan,,, este un ejemplo es q en el caso se usar un procedimiento almacenado y ello haya un select from...., y dentro de ese select haya un "count". por favor hagan un ejemplo de eso ...gracias
|
| Añadir comentario ... |
Para preguntar utiliza los foros
|
|

|
Procedimientos almacenados en Transact SQL |
|
Autor:
Pedro Herrarte Sánchez
|
|
Visitas:
76864 |
Fecha de publicación:
02/09/2007 |
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.
Posee mas de diez años de experiencia trabajando para las principales empresas de España.
Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.
Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).
Es fundador, diseñador y programador de www.devjoker.com. |
|
|
Visitas:
87
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
792
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
742
|
Comentarios:
3
|
Archivo:
Articulos
|
Visitas:
652
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
3137
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
14494
|
Comentarios:
7
|
Archivo:
Articulos
|
Visitas:
1474
|
Comentarios:
3
|
Archivo:
Articulos
|
|
Visitas:
691
|
Comentarios:
2
|
Archivo:
Articulos
|
|
Visitas:
368
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
2007
|
Comentarios:
2
|
Archivo:
Articulos
|
|
|
 |
|
 |