Вы находитесь на странице: 1из 21

Implementacin de

procedimientos
almacenados

Introduccin

Introduccin a los procedimientos almacenados

Creacin, ejecucin, modificacin y eliminacin de


procedimientos almacenados

Utilizacin de parmetros en los procedimientos


almacenados

Ejecucin de procedimientos almacenados extendidos

Control de mensajes de error

Consideraciones acerca del rendimiento

Introduccin a los procedimientos almacenados

Definicin de procedimientos almacenados

Procesamiento inicial de los procedimientos


almacenados

Procesamientos posteriores de los procedimientos


almacenados

Ventajas de los procedimientos almacenados

Definicin de procedimientos almacenados

Colecciones con nombre de instrucciones Transact-SQL

Encapsulado de tareas repetitivas

Admiten cinco tipos (del sistema, locales, temporales,


remotos y extendidos)

Aceptar parmetros de entrada y devolver valores

Devolver valores de estado para indicar que se ha


ejecutado satisfactoriamente o se ha producido algn
error

Procesamiento inicial de los procedimientos


almacenados
Creacin
Creacin

Anlisis
Anlisis

Ejecucin
Ejecucin

Optimizacin
Optimizacin

(por
(porprimera
primeravez
vez
oorecompilacin)
recompilacin)

Compilacin
Compilacin

Se
Se almacena
almacena en
en las
las tablas
tablas
sysobjects
sysobjects yy syscomments
syscomments

El
El plan
plan compilado
compilado se
se
coloca
coloca en
en la
la cach
cach de
de
procedimientos
procedimientos

Procesamientos posteriores de los procedimientos


almacenados
Plan de ejecucin recuperado
Plan de consulta

Contexto de ejecucin
Conexin 1

SELECT *
FROM
dbo.member
WHERE
member_no = ?

8082
Conexin 2

24
Conexin 3

1003

Plan sin usar se retira

Ventajas de los procedimientos almacenados

Compartir la lgica de la aplicacin

Exposicin de los detalles de las tablas de la


base de datos

Proporcionar mecanismos de seguridad

Mejorar el rendimiento

Reducir el trfico de red

Creacin, ejecucin y modificacin de


procedimientos almacenados

Creacin de procedimientos almacenados

Recomendaciones para la creacin de procedimientos


almacenados

Ejecucin de procedimientos almacenados

Modificacin y eliminacin de procedimientos


almacenados

Creacin de procedimientos almacenados

Utilice la instruccin CREATE PROCEDURE para crearlos en la base de datos activa

USE Northwind
GO
CREATE PROC dbo.OverdueOrders
AS
SELECT *
FROM
dbo.Orders
Puede anidar
hasta 32 niveles
RequiredDate
< GETDATE() AND ShippedDate IS Null
WHERE
Use sp_help
para mostrar informacin
GO

Recomendaciones para la creacin de


procedimientos almacenados

El usuario dbo debe ser el propietario de todos los


procedimientos almacenados

Un procedimiento almacenado por tarea

Crear, probar y solucionar problemas

Evite sp_Prefix en los nombres de procedimientos


almacenados

Utilice la misma configuracin de conexin para todos


los procedimientos almacenados

Reduzca al mnimo la utilizacin de procedimientos


almacenados temporales

No elimine nunca directamente las entradas de


Syscomments

Ejecucin de procedimientos almacenados

Ejecucin de un procedimiento almacenado por


separado
EXEC OverdueOrders

Ejecucin de un procedimiento almacenado en una


instruccin INSERT
INSERT INTO Customers
EXEC EmployeeCustomer

Alteracin y eliminacin de procedimientos


almacenados

Modificacin de procedimientos almacenados

Incluya cualquiera de las opciones en ALTER PROCEDURE

No afecta a los procedimientos almacenados anidados

USE
USE Northwind
Northwind
GO
GO
ALTER
ALTER PROC
PROC dbo.OverdueOrders
dbo.OverdueOrders
AS
AS
SELECT
SELECT CONVERT(char(8),
CONVERT(char(8), RequiredDate,
RequiredDate, 1)
1) RequiredDate,
RequiredDate,
CONVERT(char(8),
OrderDate,
1)
OrderDate,
CONVERT(char(8), OrderDate, 1) OrderDate,
OrderID,
OrderID, CustomerID,
CustomerID, EmployeeID
EmployeeID
FROM
FROM Orders
Orders
WHERE
RequiredDate
WHERE RequiredDate << GETDATE()
GETDATE() AND
AND ShippedDate
ShippedDate IS
IS Null
Null
ORDER
BY
RequiredDate
ORDER BY RequiredDate
GO
GO

Eliminacin de procedimientos almacenados

Ejecute el procedimiento almacenado sp_depends para determinar si los


objetos dependen del procedimiento almacenado

Utilizacin de parmetros en los procedimientos


almacenados

Utilizacin de parmetros de entrada

Ejecucin de procedimientos almacenados con


parmetros de entrada

Devolucin de valores mediante parmetros de salida

Volver a compilar explcitamente procedimientos


almacenados

Utilizacin de parmetros de entrada

Valide primero todos los valores de los parmetros


de entrada

Proporcione los valores predeterminados apropiados


e incluya las comprobaciones de Null

CREATE
CREATE PROCEDURE
PROCEDURE dbo.[Year
dbo.[Year to
to Year
Year Sales]
Sales]
@BeginningDate
DateTime,
@EndingDate
@BeginningDate DateTime, @EndingDate DateTime
DateTime
AS
AS
IF
IF @BeginningDate
@BeginningDate IS
IS NULL
NULL OR
OR @EndingDate
@EndingDate IS
IS NULL
NULL
BEGIN
BEGIN
RAISERROR('NULL
RAISERROR('NULL values
values are
are not
not allowed',
allowed', 14,
14, 1)
1)
RETURN
RETURN
END
END
SELECT
SELECT O.ShippedDate,
O.ShippedDate,
O.OrderID,
O.OrderID,
OS.Subtotal,
OS.Subtotal,
DATENAME(yy,ShippedDate)
DATENAME(yy,ShippedDate) AS
AS Year
Year
FROM
FROM ORDERS
ORDERS OO INNER
INNER JOIN
JOIN [Order
[Order Subtotals]
Subtotals] OS
OS
ON
O.OrderID
=
OS.OrderID
ON O.OrderID = OS.OrderID
WHERE
WHERE O.ShippedDate
O.ShippedDate BETWEEN
BETWEEN @BeginningDate
@BeginningDate AND
AND @EndingDate
@EndingDate
GO
GO

Ejecucin de procedimientos almacenados con


parmetros de entrada

Paso de valores por el nombre del parmetro


EXEC
EXEC AddCustomer
AddCustomer
@CustomerID
@CustomerID == 'ALFKI',
'ALFKI',
@ContactName
@ContactName == 'Maria
'Maria Anders',
Anders',
@CompanyName
@CompanyName == 'Alfreds
'Alfreds Futterkiste',
Futterkiste',
@ContactTitle
@ContactTitle == 'Sales
'Sales Representative',
Representative',
@Address
=
'Obere
Str.
57',
@Address = 'Obere Str. 57',
@City
@City == 'Berlin',
'Berlin',
@PostalCode
@PostalCode == '12209',
'12209',
@Country
@Country == 'Germany',
'Germany',
@Phone
@Phone == '030-0074321'
'030-0074321'

Paso de valores por posicin


EXEC
EXEC AddCustomer
AddCustomer 'ALFKI2',
'ALFKI2', 'Alfreds
'Alfreds
Futterkiste',
Futterkiste', 'Maria
'Maria Anders',
Anders', 'Sales
'Sales
Representative',
Representative', 'Obere
'Obere Str.
Str. 57',
57', 'Berlin',
'Berlin',
NULL,
NULL, '12209',
'12209', 'Germany',
'Germany', '030-0074321'
'030-0074321'

Devolucin de valores mediante parmetros de salida

Creacin
Creacindel
del
procedimiento
procedimiento
almacenado
almacenado

Ejecucin
Ejecucindel
del
procedimiento
procedimiento
almacenado
almacenado
Resultados
Resultadosdel
del
procedimiento
procedimiento
almacenado
almacenado

CREATE
CREATE PROCEDURE
PROCEDURE dbo.mathtutor
dbo.mathtutor
@m1
@m1 smallint,
smallint,
@m2
@m2 smallint,
smallint,
@result
@result smallint
smallint OUTPUT
OUTPUT
AS
AS
SET
SET @result
@result == @m1*
@m1* @m2
@m2
GO
GO
DECLARE
DECLARE @answer
@answer smallint
smallint
EXECUTE
EXECUTE mathtutor
mathtutor 5,
5, 6,
6, @answer
@answer
OUTPUT
OUTPUT
SELECT
SELECT 'The
'The result
result is:
is: '' ,, @answer
@answer
The
The result
result is:
is: 30
30

Volver a compilar explcitamente procedimientos


almacenados

Volver a compilar cuando

El procedimiento almacenado devuelve conjuntos de


resultados que varan considerablemente

Se agrega un nuevo ndice a una tabla subyacente

El valor del parmetro es atpico

Volver a compilar mediante

CREATE PROCEDURE [WITH RECOMPILE]

EXECUTE [WITH RECOMPILE]

sp_recompile

Ejecucin de procedimientos almacenados extendidos

Se programan con la API Servicios abiertos de datos

Pueden incluir caractersticas de C y C++

Pueden contener mltiples funciones

Se pueden llamar desde un cliente o desde SQL Server

Se pueden agregar slo a la base de datos master

EXEC master..xp_cmdshell 'dir c:\'

Control de mensajes de error

La instruccin RETURN sale incondicionalmente de una


consulta o procedimiento

sp_addmessage crea mensajes de error personalizados

@@error contiene el nmero de error de la instruccin


ejecutada ms recientemente

Instruccin RAISERROR

Devuelve un mensaje de error del sistema definido por el


usuario

Establece un indicador del sistema para registrar un error

Demostracin: Control de mensajes de error

Consideraciones acerca del rendimiento

Monitor de sistema de Windows 2000

Objeto: SQL Server: Administrador de cach

Objeto: Estadsticas de SQL

Analizador de SQL

Puede supervisar eventos

Puede probar cada instruccin en un procedimiento


almacenado