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 ...
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
Transacciones 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


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: 30394 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: 38 | Comentarios: 0 | Archivo: Articulos
Visitas: 108 | Comentarios: 0 | Archivo: Articulos
Visitas: 155 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 33 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS
Visitas: 285 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Basic .NET|C#
Visitas: 839 | Comentarios: 2 | Archivo: Articulos
Categorias: C#|ASP.NET|HTML DHTML|XML|JavaScript|ASP.NET|ASP|PHP|Visual Studio
Visitas: 712 | Comentarios: 1 | Archivo: Articulos
Categorias: Administración|Tutorial SQL
Visitas: 447 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 1053 | Comentarios: 1 | Archivo: Articulos
Categorias: ASP.NET|CSS|ASP.NET
Visitas: 250 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS

Útimos temas recibidos en los foros ...
FORMULARIO ACCESS por jcifuentes ... [Access] 11 29/05/2007
Ysmael por Ysmael ... [SQL] 0 08/01/2009
Reflection por Maurito22 ... [C#] 2 06/01/2009
Programador por Robert ... [ORACLE] 0 07/01/2009
como insertar registros en un formulario de visual basic.net desde la base de datos sql server por orlan ... [SQL Server] 8 09/06/2008
quierocodigo de autogenerado del seguro por edwin garcia ramirez ... [Visual Basic .NET] 0 07/01/2009
Video gratis sobre AJAX con ASP.NET por alexxe ... [ASP.NET] 1 06/01/2009
calcular saldo acumulativo por cben ... [SQL] 5 30/12/2008
comparar 2 campos de 2 tablas usando el like por nani ... [SQL Server] 1 06/01/2009
Apagar ordenador remoto en C# por victoryiyo ... [C#] 1 07/01/2009
numero de AUTOGENERADO IPSS por carlos ... [Visual Basic .NET] 5 30/10/2008
Como mandar mensaje a Celular por Pako ... [C#] 63 13/03/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 ...
01/06/2007 Autogenerado ESSALUD (Solución)
16/04/2004 C# y como crear instancias de clases desde un tipo String utilizando .NET FrameWork.
09/10/2006 Variables y tipos de datos    forma parte de...Tutorial C#
25/08/2007 Variables en Transact SQL    forma parte de...Tutorial de Transact SQL
03/10/2006 Instrucciones    forma parte de...Tutorial C#
08/01/2009 Windows 7 Beta ya disponible
05/07/2007 Consultar datos en Transact SQL    forma parte de...Tutorial de Transact SQL
01/01/2006 Borrado de datos. DELETE    forma parte de...Tutorial SQL
28/02/2007 Como aumentar dinamicamente la resolución de un formulario de windows con c#
01/04/2006 Estructuras de control en PL/SQL    forma parte de...Tutorial PL/SQL

 

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