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


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: 18649 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.




18/08/2008 SQL Server 2008
Visitas: 39 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 131 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 161 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 154 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 123 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 210 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 278 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 4990 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 602 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1402 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
MAQUINAS VIRTUALES por victor ... [WIN 98/NT/2000/XP] 0 19/08/2008
Y lo mismo en WEB por systemat ... [C#] 1 18/08/2008
Manual del minicom de Linux con fotos. por Meta ... [UNIX] 4 17/08/2008
PROGRAMACION por JUANMA ... [Visual Basic .NET] 1 19/08/2008
Conectar ASP con B.D Informix por Franco ... [ASP] 9 02/05/2007
Codigo salir por Jazmin ... [ASP.NET] 1 18/08/2008
EXPORTAR DATOS A ARCHIVOS PLANOS. por WIX ... [ORACLE] 10 06/08/2007
formulario por artdark ... [C#] 2 04/08/2008
Codigo salir por Jazmin ... [ASP.NET] 0 18/08/2008
cambiar de modo un gried view por ivan ... [ASP.NET] 0 18/08/2008
ayuda urgente porfavor por vicancer ... [ASP.NET] 0 18/08/2008
pollo por hajaj ... [Actualidad] 1 15/08/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 ...
03/10/2006 Programacion con C#    forma parte de...Tutorial C#
19/10/2006 Llamadas asíncronas    forma parte de...Tutorial C#
31/03/2006 Tipos de datos en PL/SQL    forma parte de...Tutorial PL/SQL
03/10/2006 Definición de clases    forma parte de...Tutorial C#
03/10/2006 Creación de objetos    forma parte de...Tutorial C#
23/05/2006 Cursores en PL/SQL    forma parte de...Tutorial PL/SQL
29/04/2008 Leer un campo XML de SQL Server 2005 con C#
21/02/2007 Subconsultas    forma parte de...Tutorial SQL
22/10/2005 El lenguaje SQL    forma parte de...Tutorial SQL
16/10/2006 Delegados y eventos    forma parte de...Tutorial C#

 

Encuesta
Si trabajas con .NET ¿Que entorno utilizas?
[Ver] [Votar]