[SQL] Como planear un Procedimiento almacenado en SQL Server 2008 (Creación y ejecución).

26 05 2009

Saludos amigos, no se si sea realmente el nombre correcto para este post, le idea es que a partir de una sentencia SQL (Select, Insert, Update, Delete, Etc) puedan lograr parametrizar la consulta  y posteriormente elaborar su procedimiento almacenado.

Paso 1. Sentencia SQL a ejecutar.

USE prueba;
GO

INSERT INTO dbo.DEMO_PRODUCTO (nombre, precio, descripcion, fecha)
VALUES('Whisky', 275.50,'12 Años de añejamiento, promoción 2x1',GETDATE());
GO

SELECT TOP 1 * FROM dbo.DEMO_PRODUCTO ORDER BY id DESC;
GO

image

Nota: deben de asegurarse que la sentencia SQL que ejecuten se realice correctamente.

Paso 2. Parametrizar la Sentencia SQL.

Por cada uno de los campos que se requieren al insertar (para el caso de este ejemplo), deben de convertirse en variables T-SQL con el tipo de dato correspondiente, asignarles el valor del campo a Insertar y sustituirlos en la sentencia SQL.

USE prueba;
GO

DECLARE @producto varchar(100), 
        @precio smallmoney, 
        @descripcion varchar(750);
        
SET @producto = 'Agua mineral';
SET @precio = 12.50;
SET @descripcion = 'Agua mineral de 2 litros';

INSERT INTO dbo.DEMO_PRODUCTO (nombre, precio, descripcion, fecha)
VALUES(@producto, @precio,@descripcion,GETDATE());
GO

SELECT TOP 2 * FROM dbo.DEMO_PRODUCTO ORDER BY id DESC;
GO    

image

Paso 3. Convertir el Bacth T-SQL a Procedimiento almacenado.

Ya que tenemos la sentencia parametrizada, el paso final es convertirla en procedimiento almacenado, para esto tenemos que agregar la estructura de un “STORE PROCEDURE – SP”  de SQL Server 2008 como lo muestra el siguiente ejemplo:

CREATE PROCEDURE <Procedure_Name, sysname, Procedure_Name>
    <@param1, sysname, @p1> <datatype_for_param1, , int> = <default_value_for_param1, , 0>, 
    <@param2, sysname, @p2> <datatype_for_param2, , int> = <default_value_for_param2, , 0>
AS
    <Instrucciones T-SQL (Insert, Select, Update, Delete, ETC)>
GO

La primera parte es asignarle un nombre al SP.

La Segunda parte es crear los parámetros que recibirá el SP.

Como tercera parte es crear el Batch de T-SQL que se ejecutara al llamar a nuestro SP.

Ejemplo:

image 

El código:

CREATE PROCEDURE InsertaProductoSP
    @producto varchar(100), 
    @precio smallmoney, 
    @descripcion varchar(750)
AS
    INSERT INTO dbo.DEMO_PRODUCTO (nombre, precio, descripcion, fecha)
    VALUES(@producto, @precio,@descripcion,GETDATE());
GO

La ejecución:

USE prueba;
GO

EXEC InsertaProductoSP 'Hielos', 12.90, 'Bolsa de hielos de 3 kilos';
GO

SELECT TOP 3 * FROM dbo.DEMO_PRODUCTO ORDER BY id DESC;
GO

Resultado:

image

Espero les sea de ayuda, para algunos usuarios el ejemplo les puede parecer sumamente sencillo (y lo es), pero también creo que a los usuarios que inician los ubicara un poco más de como desarrollar en Transact SQL 2008, espero sus comentarios.


Acciones

Información

10 respuestas

30 05 2009
alexpro

excelente ,esta vacanisimo este minitutorial,ojala
nos regalaras unpoco de conocimiento en la administracion en sql.
grcias …tienes un 10!

10 07 2009
alvaro

hola broo q buen material muchas graciasss!!!

15 07 2009
30 12 2009
hozcarinho

Bastante claro y explicito tu ejemplo la verdad, te da una idea muy clara de como trabaja un SP gracias por tu aporte

18 08 2010
GAROTINHO20

hola man muy bueno el ejemplo

NO SE SI TE PUEDES PONER
EJEMPLO MAS COMPLICADOS

COMO PARA UPDATE PERO
CON SUB SENTENCIAS
LO K PASA ES K
SOY NUEVO CON

sql server

18 08 2010
GAROTINHO20F

PORFAS SI MAS EJEMPLILLOS

6 03 2011
Hugo

Excelente ejercicio para aprendices como yo que nos estamos
iniciando este campo de la programacion.
muchas gracias

3 08 2011
rosa

como hago ?
obtener un listado de todos los clientes (nombre, ruc, etc) y la cantidad total de comprobantes emitidos para cada cliente durante el primer semestre del año 2009, ademas el monto total en soles pagado por cada cliente hasta el momento en forma descendente.
-Obtener el resultado con procedimientos almacenados, si se concidera necesario emplear funciones
———————-esta es la bdVentas———————-
USE Master
GO
–Creacion de la base de datos BDVentas
IF EXISTS (SELECT Name FROM SysDatabases WHERE Name IN (‘BDVentas’))
DROP DATABASE BDVentas
GO
CREATE DATABASE BDVentas
GO
/*—————————Creacion de Tablas—————————–*/
USE BDVentas
GO
/*—————————–Tabla Cliente——————————–*/
CREATE TABLE TCliente
(
IdCliente int identity(1,1),
Nombre varchar(60),
Ruc varchar(11),
Direccion varchar(50),
Telefono varchar(15),
Email varchar(60),
PRIMARY KEY (IdCliente)
——————————————————–
ayuda
xfavor

)
GO
/*—————————–Tabla Producto——————————-*/
CREATE TABLE TProducto
(
IdProducto int identity(1,1),
Producto varchar(50),
Unidad varchar(15),
PrecioU decimal(9,2),
Stock smallint,
Marca varchar(40),
PRIMARY KEY (IdProducto)
)
GO
/*—————————Tabla Comprobante——————————*/
CREATE TABLE TComprobante
(
IdComprobante int identity(1,1),
Tipo varchar(10),
Numero varchar(10),
FechaEmision datetime,
FechaVencimiento datetime,
Anulado bit,
IdCliente int,
PRIMARY KEY (IdComprobante),
FOREIGN KEY (IdCliente) REFERENCES TCliente
)
GO
/*—————————–Tabla Detalle——————————–*/
CREATE TABLE TDetalle
(
IdDetalle int identity(1,1),
Cantidad smallint,
IdProducto int,
IdComprobante int,
PRIMARY KEY (IdDetalle),
FOREIGN KEY (IdProducto) REFERENCES TProducto,
FOREIGN KEY (IdComprobante) REFERENCES TComprobante
)
GO

15 09 2011
Joefay

Muy bien, Gracias por el ejemplo me sirvió mucho.

31 01 2012
angelica

hola:
que instrucción o sentencia se puede aplicar para que en un campo de 10 caracteres, solo muestre los que tienen 10 caracteres y que sean numéricos.agradecere su aporte

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.