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
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
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)> GOLa 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:
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()); GOLa 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; GOResultado:
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.
excelente ,esta vacanisimo este minitutorial,ojala
nos regalaras unpoco de conocimiento en la administracion en sql.
grcias …tienes un 10!
hola broo q buen material muchas graciasss!!!
[...] http://sqlpsykrest.wordpress.com/2009/05/26/sql-como-planear-un-procedimiento-almacenado-en-sql-serv… [...]
Bastante claro y explicito tu ejemplo la verdad, te da una idea muy clara de como trabaja un SP gracias por tu aporte
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
PORFAS SI MAS EJEMPLILLOS
Excelente ejercicio para aprendices como yo que nos estamos
iniciando este campo de la programacion.
muchas gracias
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
Muy bien, Gracias por el ejemplo me sirvió mucho.
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