Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Implementacin
de procedimientos
almacenados y funciones
Introduccin
Implementacin de procedimientos almacenados
Creacin de procedimientos almacenados
parametrizados
Creacin de funciones
Control de errores
Control del contexto de ejecucin
Qu es un procedimiento almacenado
Una coleccin con nombre de instrucciones
Transact-SQL o cdigo de Microsoft .NET Framework
Acepta parmetros de entrada y devuelve valores
de parmetros de salida
Devuelve un valor de estado para indicar el xito
o el error
almacenados temporales
DROP PROCEDURE
DROP PROC Production.LongLeadProducts
Parmetros de entrada
Proporcione valores predeterminados apropiados
Valide los valores de parmetros de entrada,
incluyendo comprobaciones de valores nulos
ALTER PROC Production.LongLeadProducts
@MinimumLength int = 1 -- default value
AS
IF (@MinimumLength < 0)
-- validate
BEGIN
RAISERROR('Invalid lead time.', 14, 1)
RETURN
END
SELECT Name, ProductNumber, DaysToManufacture
FROM
Production.Product
WHERE DaysToManufacture >= @MinimumLength
ORDER BY DaysToManufacture DESC, Name
EXEC Production.LongLeadProducts @MinimumLength=4
Tipos de funciones
Funciones escalares
Similar a una funcin integrada
Devuelve un nico valor
Funciones con valores de tabla en lnea
Similares a una vista con parmetros
Devuelven una tabla como el resultado
de una nica instruccin SELECT
Funciones con valores de tabla de varias instrucciones
Similares a un procedimiento almacenado
Devuelven una nueva tabla como el resultado
de instrucciones INSERT
END TRY
SELECT * FROM TableWithKey -- NOT ALLOWED
Considere
el uso de XACT_ABORT ON y XACT_STATE
BEGIN
TRY
BEGIN
CATCH
BEGIN
TRANERROR_NUMBER()
-SELECT
INSERT ...
END
SET CATCH
XACT_ABORT ON
INSERT ...
Capture
informacin de ERROR_xxx si es necesario
BEGIN
TRY
COMMIT TRAN
BEGIN TRAN
END TRY
...
BEGIN CATCH
COMMIT
BEGIN
TRY TRAN
ROLLBACK
TRAN
END...
TRY
SELECT MESSAGE_NUMBER...
BEGIN
CATCH
END
TRY
CATCH
IF
(XACT_STATE())
= -1
-- uncommitable
BEGIN CATCH
ROLLBACK
INSERT
INTOTRAN
ErrorLog
ELSE
IF
(XACT_STATE())
= 1ERROR_MESSAGE(),
-- commitable
VALUES (ERROR_NUMBER(),
GETDATE())
COMMIT
TRAN
END CATCH
END CATCH
Qu es el contexto de ejecucin
Ted
(Ningn permiso)
Pat
(Permiso SELECT)
Sales.Order
(Propietario: John)
GetOrders
Ted
(Permiso EXECUTE)
Procedimiento almacenado
(Propietario: Pat)
Pat
La clusula EXECUTE AS
Opciones de EXECUTE AS
El autor de la llamada del mdulo
La persona que crea o modifica el mdulo
El propietario del mdulo
Un usuario especificado
CREATE PROCEDURE GetOrders
WITH EXECUTE AS 'Pat'
SELF
OWNER
CALLER
{ CALLER | SELF | OWNER |
AS
nombreDeUsuario }
SELECT
* FROM Sales.Order
AS
SELECT * FROM Sales.Order
dbo
Mdulo de cdigo firmado
GRANT AUTHENTICATE
dbo asignado
Usuario de certificado