Sei sulla pagina 1di 16

Instituto Tecnolgico de Colima

Ingeniera en Sistemas Computacionales

Taller de Base de Datos


Profesor: Oscar Daniel Hernndez Barbosa

Prctica 6: Restauracin

Villa de lvarez, Colima Viernes 25 de Noviembre de 2011

Prctica A: Creacin de procedimientos almacenados


Ejercicio 1 Escritura y ejecucin de un procedimiento almacenado En este ejercicio crear un procedimiento almacenado que enumera los cinco productos ms caros ordenados por precio. Para crear un procedimiento almacenado con el Analizador de consultas de SQL Server escribimos el siguiente cdigo;
USE ClassNorthwind IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[FiveMostExpensiveProducts]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) DROP PROCEDURE [dbo].[FiveMostExpensiveProducts] SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON CREATE PROCEDURE [FiveMostExpensiveProducts] AS SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY UnitPrice desc SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON

Para ejecutar un procedimiento almacenado se escribe el comando exec seguido del nombre del procedimiento creado anteriormente

Ejercicio 2 Bsqueda de informacin de los procedimientos almacenados En este ejercicio ejecutar procedimientos almacenados del sistema y usar el Administrador corporativo de SQL Server y el Analizador de consultas SQL para mostrar informacin acerca de los procedimientos almacenados que ha creado. Para mostrar las definiciones de los procedimientos almacenados En este procedimiento usar el Administrador corporativo de SQL Server y el Analizador de consultas SQL para mostrar las definiciones de los procedimientos almacenados. Primero abrimos el administrador corporativo, expandimos el rbol de consola, bases de datos, classNorthwind, procedimientos almacenado y en la vista de detalles damos click derecho en FiveMostExpensiveProducts y despues en propiedades y veremos la definicin del procedimiento;

En seguida para comprobar la definicin abrimos el analizador de consultas y escribimos el siguiente cdigo sp_helptext FiveMostExpensiveProducts;

Para mostrar informacin de metadatos acerca de los procedimientos Almacenados En este procedimiento usar las funciones OBJECT_ID y OBJECTPROPERTY para mostrar metadatos acerca de los procedimientos almacenados. Abrimos el analizador de cosultas y escribimos el siguiente cdigo SELECT OBJECT_ID('FiveMostExpensiveProducts') para ver identificador del objeto del procedimiento;

Ahora escribimos el siguiente cdigo en el analizador de consultas SELECT OBJECTPROPERTY(1333579789, 'ExecIsAnsiNullsOn') para saber si la

configuracin de las conexiones ANSI NULL estaba activa cuando se cre el procedimiento almacenado FiveMostExpensiveProducts.

Vemos que el resultado es 1, esto significa true, es decir, que si estaba activa la configuracin ANSI NULL. Ahora ejecutamos el siguiente cdigo SELECT OBJECTPROPERTY(1333579789, 'ExecIsQuotedIdentOn') para determinar si la configuracin de las conexiones del identificador ANSI citado estaba activa cuando cre el procedimiento.

Observamos que el resultado es 0, lo que indica que no estaba activa la configuracin de las conexiones del identificador ANSI.

Prctica B: Creacin de procedimientos almacenados con parmetros


Ejercicio 1 Utilizacin del Asistente para creacin de procedimientos Almacenados En este ejercicio usar el Asistente para creacin de procedimientos almacenados con el fin de crear un procedimiento almacenado en la base de datos ClassNorthwind que actualiza el nmero de telfono de un empleado. Para usar el Asistente para creacin de procedimientos almacenados En este procedimiento usar el Asistente para creacin de procedimientos almacenados con el fin de crear un procedimiento almacenado que actualiza el nmero de telfono de un empleado. 1. Abra el Administrador corporativo de SQL Server. 2. En el rbol de la consola, haga clic en el servidor.

3. En el men Herramientas, haga clic en Asistentes. 4. Expanda Base de datos y haga doble clic en Asistente para creacin de procedimientos almacenados. 5. Seleccione la base de datos ClassNorthwind. 6. Cree un procedimiento almacenado que actualice el nmero de telfono de un empleado. El nmero de telfono est almacenado en la tabla Employees. Seleccione la accin Actualizar para la tabla Employees. 7. Haga clic en el botn Modificar para modificar las propiedades del procedimiento almacenado. 8. Denomine UpdateEmployeePhone al procedimiento almacenado. 9. Incluya slo la columna HomePhone en la clusula SET y slo EmployeeID en la clusula WHERE. 10. En el rbol de la consola, expanda la base de datos ClassNorthwind y, a continuacin, haga clic en Procedimientos almacenados. 11. Compruebe que el procedimiento almacenado UpdateEmployeePhone aparece en el panel de detalles.

Ahora le damos click derechoy en propiedades para ver el contenido del procedimiento

Ahora comprobamos que el procedimiento funciona con este ejemplo: Actualice el nmero de telfono a (503) 555-1212 para el empleado Nancy Davolio, cuyo EmployeeID es 1. EXEC UpdateemployeePhone @EmployeeID_1 = 1, @HomePhone_2 = '(503)555-1212'

Para generar una secuencia de comandos En este procedimiento generar y guardar una secuencia de comandos para el procedimiento almacenado que cre con el Asistente para creacin de procedimientos almacenados. Abrimos el adminstrador corporativo y expandimos el rbol de consola, bases de datos, classNorthwind, procedimientos almacenados y en el panel de detalles le damos click derecho en el procedimiento que creamos anteriormente y seleccionamos propiedades, todas las tareas y en generar secuencia de comandos SQL y despues en aceptar, la guardamos como UpdateEmployeePhone.sql

Este es el archivo que se genera:

Ejercicio 2 Utilizacin del control de errores en procedimientos almacenados En este ejercicio ejecutar una secuencia de comandos que crea un procedimiento almacenado para agregar un proveedor y un producto a la base de datos ClassNorthwind. Despus, probar el control de errores contenido en esta secuencia de comandos. Para crear y probar un procedimiento almacenado En este procedimiento abrir y repasar una secuencia de comandos que crea un procedimiento almacenado para agregar un proveedor y un producto nuevos. A continuacin, probar que el procedimiento almacenado se ejecuta como se esperaba al usarlo para insertar un proveedor y un producto nuevos. Finalmente, probar el control de errores del procedimiento almacenado. Vamos a ejecutar el siguiente cdigo para crear un procediemiento almacenado que despues vamos a probar, asi que abrimos el analizador de consultas y escribimos este cdigo
USE ClassNorthwind GO /* If the object already exists in the database, drop it. */ IF OBJECT_ID('SupplierProductInsert') IS NOT NULL DROP PROCEDURE SupplierProductInsert GO CREATE PROCEDURE SupplierProductInsert @CompanyName nvarchar (40) = NULL, @ContactName nvarchar (40) = NULL, @ContactTitle nvarchar (40)= NULL, @Address nvarchar (60) = NULL, @City nvarchar (15) = NULL, @Region nvarchar (40) = NULL, @PostalCode nvarchar (10) = NULL, @Country nvarchar (15) = NULL, @Phone nvarchar (24) = NULL, @Fax nvarchar (24) = NULL, @HomePage ntext = NULL, @ProductName nvarchar (40) = NULL,

@CategoryID int = NULL, @QuantityPerUnit nvarchar (20) = NULL, @UnitPrice money = NULL, @UnitsInStock smallint = NULL, @UnitsOnOrder smallint = NULL, @ReorderLevel smallint = NULL, @Discontinued bit = NULL AS IF @CompanyName @ContactName @Address @City @Region @PostalCode @Country @Phone IS NULL OR IS NULL OR IS NULL OR

IS NULL OR IS NULL OR IS NULL OR IS NULL OR IS NULL OR IS NULL OR IS NULL OR

@ProductName @CategoryID

@QuantityPerUnit IS NULL OR @Discontinued BEGIN PRINT 'You must provide Company Name, Contact Name, Address, City' PRINT 'Region, Postal Code, Country, Phone, Product Name, and Discontinued.' PRINT '(Contact Title, Fax, Home Page, Unit Price, Units in Stock Units on Order and Reorder Level can be null.)' RETURN END IS NULL

BEGIN TRANSACTION INSERT Suppliers (

CompanyName, ContactName, Address, City, Region, PostalCode, Country, Phone) VALUES ( @CompanyName, @ContactName, @Address, @City, @Region, @PostalCode, @Country, @Phone) IF @@error <> 0 BEGIN ROLLBACK TRAN RETURN END DECLARE @InsertSupplierID int SELECT @InsertSupplierID=@@identity INSERT Products ( ProductName, SupplierID, CategoryID, QuantityPerUnit, Discontinued) VALUES ( @ProductName,

@InsertSupplierID, @CategoryID, @QuantityPerUnit, @Discontinued) IF @@error <> 0 BEGIN ROLLBACK TRAN RETURN END PRINT '*** New Product and Supplier added *** '

COMMIT TRANSACTION GO

Ahora abrimos el archivo supplierProductInsert.sql y lo modificamos para insertar un nuevo proveedor y un nuevo producto, despues lo ejecutamos en el analizador de consultas para comprobar que funciona

EXEC SupplierProductInsert @CompanyName = 'APPLE', @ContactName = 'ADENIK KENT', @Address = 'PABLO SILVS', @City = 'COLIMA', @Region = 'V DE A', @PostalCode = '28984', @Country = 'MEXICO', @Phone = '3123088800', @ProductName = 'iPAD', @CategoryID = '1', @QuantityPerUnit = '1', @UnitPrice = 10000, @Discontinued = 0

Ejercicio 3 Personalizacin de mensajes de error En este ejercicio crear un mensaje de error personalizado, que se guardar en el registro de aplicacin del Visor de sucesos de Windows 2000, que indica el identificador del proveedor que se insert junto con el usuario de SQL Server que realiz la insercin. Para crear un mensaje de error personalizado En este procedimiento modificar el procedimiento almacenado SupplierProduct para llamar a los mensajes de error personalizados. El archivo Soluciones\CustomErrorAnswer.sql contiene la secuencia de comandos completa de este procedimiento. Este es el cdigo modificado para crear la variable de error
USE ClassNorthwind GO ALTER PROCEDURE SupplierProductInsert @CompanyName nvarchar (40) = NULL, @ContactName nvarchar (40) = NULL, @ContactTitle nvarchar (40)= NULL, @Address nvarchar (60) = NULL, @City nvarchar (15) = NULL, @Region nvarchar (40) = NULL, @PostalCode nvarchar (10) = NULL, @Country nvarchar (15) = NULL,

@Phone nvarchar (24) = NULL, @Fax nvarchar (24) = NULL, @HomePage ntext = NULL, @ProductName nvarchar (40) = NULL, @CategoryID int = NULL, @QuantityPerUnit nvarchar (20) = NULL, @UnitPrice money = NULL, @UnitsInStock smallint = NULL, @UnitsOnOrder smallint = NULL, @ReorderLevel smallint = NULL, @Discontinued bit = NULL AS IF @CompanyName @ContactName @Address @City @Region @PostalCode @Country @Phone IS NULL OR IS NULL OR IS NULL OR

IS NULL OR IS NULL OR IS NULL OR IS NULL OR IS NULL OR IS NULL OR IS NULL OR

@ProductName @CategoryID

@QuantityPerUnit IS NULL OR @Discontinued BEGIN PRINT 'You must provide Company Name, Contact Name, Address, City' PRINT 'Region, Postal Code, Country, Phone, Product Name, and Discontinued' PRINT '(Contact Title, Fax, Home Page, Unit Price, Units in Stock, Units on Order and Reorder Level can be null.)' RETURN END IS NULL

/* #1 Substitute Student Code Here. ** Declare a variable that will store the value of the username who ** executes this stored procedure.

*/

DECLARE @UserName nvarchar (60) SELECT @UserName = suser_sname()

BEGIN TRANSACTION INSERT Suppliers ( CompanyName, ContactName, Address, City, Region, PostalCode, Country, Phone) VALUES ( @CompanyName, @ContactName, @Address, @City, @Region, @PostalCode, @Country, @Phone) IF @@error <> 0 BEGIN ROLLBACK TRAN RETURN END DECLARE @InsertSupplierID int SELECT @InsertSupplierID=@@identity INSERT Products ( ProductName, SupplierID,

CategoryID, QuantityPerUnit, Discontinued) VALUES ( @ProductName, @InsertSupplierID, @CategoryID, @QuantityPerUnit, @Discontinued) IF @@error <> 0 BEGIN ROLLBACK TRAN RETURN END

/* #2 Substitute Student Code Here. Create a RAISERROR statement to call ** error 50018 and insert the values for supplier number and username. ** Replacing the following statement: ** PRINT '*** New Product and Supplier added *** ' */ RAISERROR (50018, 16, 1, @InsertSupplierID, @UserName) PRINT '*** New Product and Supplier added *** '

COMMIT TRANSACTION GO

/* #3 Substitute Student Code Here to create error number 50018. */ EXEC sp_addmessage 50018, 16, 'Supplier %d was inserted by %s', 'us_english','true' GO

Potrebbero piacerti anche