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 ...
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
Transacciones en Transact SQL
Variables 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


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: 22355 Fecha de publicación: 02/09/2007
Pedro Herrarte, es consultor independiente, ofreciendo sercivios 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: 143 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|ADO.NET
27/09/2008 Navegando ....
Visitas: 60 | Comentarios: 0 | Archivo: Articulos
Categorias: Humor
Visitas: 175 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|WCF
Visitas: 723 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 179 | Comentarios: 0 | Archivo: Articulos
Categorias: JavaScript|ASP.NET
Visitas: 625 | Comentarios: 0 | Archivo: Articulos
Categorias: Windows XP|Linux|Windows Vista
Visitas: 410 | Comentarios: 0 | Archivo: Articulos
Categorias: Linux|BSD
Visitas: 215 | Comentarios: 0 | Archivo: Articulos
Categorias: Programación|Actualidad
18/08/2008 SQL Server 2008
Visitas: 1037 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 735 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ

Útimos temas recibidos en los foros ...
quemar cd/dvd con nero por carolina ... [WIN 98/NT/2000/XP] 32 03/04/2007
COASTAL VACATIONS MEJORA TU ECONOMIA por benigno ... [Access] 0 06/10/2008
OPORTUNIDAD DE NEGOCIO COASTAL VACATIONS por benigno ... [Actualidad] 0 06/10/2008
COASTAL VACATIONS REVOLUCION COMERCIAL por benigno ... [C#] 0 06/10/2008
COASTAL VACATIONS NEGOCIO por benigno ... [C#] 0 06/10/2008
Pasar el contenido de un dataGrid a Excel por Minguial ... [C#] 4 06/03/2008
Crear una sesion de inicio por jhors ... [ASP.NET] 1 06/10/2008
Enviar email a correos cmo hotmail por Cajami ... [C#] 13 06/09/2007
Como mandar mensaje a Celular por Pako ... [C#] 23 13/03/2007
Casting por sara ... [Java] 1 06/10/2008
ORA-22288: file or LOB operation GetLength failed por heroga ... [ORACLE] 1 05/08/2008
Galeria de imagenes en Visual Web Developer por luis ... [ASP.NET] 0 06/10/2008

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 ...
19/09/2006 Recuperar datos BLOB de ORACLE
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
23/05/2006 Cursores en PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Consultar datos. SELECT    forma parte de...Tutorial SQL
14/07/2006 Tablas PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 El lenguaje SQL    forma parte de...Tutorial SQL
21/02/2007 Subconsultas    forma parte de...Tutorial SQL
09/05/2006 Como leer XML con C#
13/04/2008 Métodos Extensores: INNER JOIN    forma parte de...Linq y Métodos extensores
03/10/2006 Programacion con C#    forma parte de...Tutorial C#

 

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