InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial de Transact SQL
Introducción a Transact SQL
Programación con Transact SQL
Fundamentos de Transact SQL
Tipos de datos en Transact SQL
Variables en Transact SQL
Equivalencia de datos de SQL Server y .NET
Operadores en Transact SQL
Estructuras de control en Transact SQL
Control de errores en Transact SQL
Consultar datos en Transact SQL
Consultas agregadas
Select FOR XML
Operaciones con conjuntos.
Insertar datos en Transact SQL
Actualizar datos en Transact SQL
Borrar datos en Transact SQL
Transacciones en Transact SQL
Procedimientos almacenados en Transact SQL
Funciones en Transact SQL
Funciones integradas de Transact SQL (I)
Triggers en Transact SQL
Cursores en Transact SQL
SQL dinámico en Transact SQL
También puedes ver ...
Cómo insertar un fichero .xml en un campo de tipo XML de SQL server 2005 o 2008
SET IDENTITY_INSERT ON y LinqToSQL
SQL Server 2008
LinQ To SQL - Un ejemplo sencillo
Formatear números en SQL Server
Leer un campo XML de SQL Server 2005 con C#
SQL dinámico en Transact SQL
Cursores en Transact SQL
Triggers en Transact SQL
Funciones en Transact SQL

Afiliados
La Web del programador
MundoProgramacion


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 datetime

AS

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 datetime

set @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 datetime

AS

BEGIN TRY

BEGIN TRAN

INSERT INTO CLIENTES

(nombre, apellido1, apellido2, nifcif, fxnacimiento) VALUES

(@nombre, @apellido1, @apellido2, @nifCif, @fxNaciento)

COMMIT

END TRY

BEGIN CATCH

ROLLBACK

PRINT 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 CUENTAS

WHERE NUMCUENTA = @numCuenta

END

     Y para ejecutar este procedure:


DECLARE
@saldo decimal(10,2)

EXEC spu_ObtenerSaldoCuenta '200700000001', @saldo output

PRINT @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) < 0

BEGIN

RETURN 1

END

ELSE

RETURN 0

END

    El siguiente ejemplo muestra como ejecutar el procedure y obtener el valor devuelto.


DECLARE
@rv int

EXEC @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 MOVIMIENTOS

INNER JOIN CUENTAS ON MOVIMIENTOS.IDCUENTA = CUENTAS.IDCUENTA

WHERE NUMCUENTA = @numCuenta

ORDER 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

 


Inicio | Tutorial de Transact SQL Transacciones en Transact SQLTutorial de Transact SQLFunciones en Transact SQL Versión para imprimir Foros de consulta

 
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


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial de Transact SQL Transacciones en Transact SQLTutorial de Transact SQLFunciones en Transact SQL Versión para imprimir

Procedimientos almacenados en Transact SQL
Autor: Pedro Herrarte Sánchez
Visitas: 46506 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: 201 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 315 | Comentarios: 1 | Archivo: Articulos
Visitas: 390 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 615 | Comentarios: 3 | Archivo: Articulos
Categorias: C#|ASP.NET
Visitas: 1177 | Comentarios: 4 | Archivo: Articulos
Visitas: 697 | Comentarios: 1 | Archivo: Articulos
Categorias: ASP.NET|ASP|Windows XP|Windows 2003
Visitas: 828 | Comentarios: 2 | Archivo: Articulos
Categorias: Java|Solaris
Visitas: 584 | Comentarios: 0 | Archivo: Articulos
Visitas: 1484 | Comentarios: 1 | Archivo: Articulos
Categorias: ADO.NET
Visitas: 1533 | Comentarios: 3 | Archivo: Articulos
Categorias: ASP.NET

Útimos temas recibidos en los foros ...
Manual Visual Studio.NET por Shiko ... [Visual Basic .NET] 34 26/10/2006
llamar procedimientos de pl/sql en java por jhon ... [ORACLE] 0 03/07/2009
consulta multitablas por anga ... [mySQL] 0 03/07/2009
objetos helper php bajo oracle por objetos_helper_oracle ... [ISAPI] 0 02/07/2009
ranuras isa o pci por sara ... [Access] 5 30/03/2006
descargar tutorial C# por afmp ... [C#] 54 14/10/2008
Tutorial TOAD para Oracle en Español por ijpj ... [ORACLE] 19 14/03/2009
quiero mi numero de mi autogenerado por pablo ... [Visual Basic .NET] 1 15/06/2009
Ayuda con cargar fotografias de otra pc por Alex ... [ASP.NET] 0 01/07/2009
splash screen por zelca ... [Visual Basic .NET] 0 01/07/2009
Error de inicio de aplicación por Danrre ... [C#] 0 30/06/2009
sumar los precios de la columna "precio" del grig por jardinderosas ... [C#] 7 01/11/2007

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
03/10/2006 Herencia y métodos virtuales    forma parte de...Tutorial C#
14/07/2007 Como encriptar texto y variables usando algoritmos estandard como DES o TRIPLEDES
03/10/2006 Creación de objetos    forma parte de...Tutorial C#
03/10/2006 Definición de clases    forma parte de...Tutorial C#
22/04/2008 TripleDES - Un ejemplo practico en C#
11/12/2006 Genéricos    forma parte de...Tutorial C#
01/06/2006 Cursores de actualización en PL/SQL    forma parte de...Tutorial PL/SQL
24/05/2006 Cursores Explicitos en PL/SQL    forma parte de...Tutorial PL/SQL
24/05/2006 Cursores Implicitos en PL/SQL    forma parte de...Tutorial PL/SQL
23/05/2006 Cursores en PL/SQL    forma parte de...Tutorial PL/SQL

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]