Procedimientos almacenados de AdventureWorks

La base de datos OLTP de ejemplo AdventureWorks incluye varios procedimientos almacenados de Transact-SQL. Los ejemplos de procedimientos almacenados de Common Language Runtime (CLR) se pueden descargar de la página principal que proporciona ejemplos y proyectos de la comunidad de Microsoft SQL Server.

Procedimientos almacenados de CLR

En la tabla siguiente se enumeran los ejemplos de procedimientos almacenados de CLR disponibles. Para obtener más información sobre los procedimientos almacenados de CLR, vea Procedimientos almacenados de CLR.

Ejemplo

Descripción

AdventureWorks Cycles CLR Layer

Procedimiento almacenado basado en C# que toma datos xml como entrada y los inserta en las columnas de la tabla Person.Contact.

Procedimientos almacenados de Transact-SQL

En la tabla siguiente se enumeran los procedimientos almacenados de Transact-SQL que se incluyen en la base de datos OLTP de ejemplo AdventureWorks. Para obtener más información sobre los procedimientos almacenados de Transact-SQL, vea Descripción de los procedimientos almacenados.

Procedimiento almacenado

Descripción

Parámetros de entrada

dbo.uspGetBillOfMaterials

Utiliza una consulta recursiva (expresión de tabla común) para generar una lista de materiales multinivel: todos los componentes de nivel 1 con un nivel 0 de ensamblado, todos los componentes de nivel 2 con un nivel 1 de ensamblado, etc.

@StartProductIDint

@CheckDatedatetime

dbo.uspGetEmployeeManagers

Utiliza una consulta recursiva (expresión de tabla común) para devolver los directores directos e indirectos del empleado especificado.

@EmployeeIDint

dbo.uspGetManagerEmployees

Utiliza una consulta recursiva (expresión de tabla común) para devolver los empleados directos e indirectos del director especificado.

@ManagerIDint

dbo.uspLogError

Registra información de error en la tabla dbo.ErrorLog sobre el error que ha dado lugar a que la ejecución salte a un bloque CATCH de un constructor TRY...CATCH. Este procedimiento debe ejecutarse desde el ámbito de un bloque CATCH; de lo contrario, regresará sin insertar información sobre el error.

@ErrorLogIDint = 0 OUTPUT

dbo.uspPrintError

Imprime información de error sobre el error que ha dado lugar a que la ejecución salte a un bloque CATCH de un constructor TRY...CATCH. Este procedimiento debe ejecutarse desde el ámbito de un bloque CATCH; de lo contrario, regresará sin imprimir información sobre el error.

Ninguno

dbo.uspGetWhereUsedProductID

Utiliza una consulta recursiva (expresión de tabla común) para devolver todos los ensamblados de producto que utilizan el componente de producto especificado. Por ejemplo, devuelve todas las bicicletas que utilizan una rueda específica o un tipo de pintura específico.

@StartProductIDint

@CheckDatedatetime

uspUpdateEmployeeHireInfo

Actualiza la tabla Employee e inserta una fila nueva en la tabla EmployeePayHistory con los valores especificados en los parámetros de entrada.

@EmployeeIDint

@Titlenvarchar(50)

@HireDatedatetime

@RateChangeDatedatetime

@Ratemoney

@PayFrequencytinyint

@CurrentFlagdbo.Flag

uspUpdateEmployeeLogin

Actualiza la tabla Employee con los valores especificados en los parámetros de entrada para el EmployeeID especificado.

@EmployeeID int

@ManagerIDint

@LoginIDnvarchar(256)

@Titlenvarchar(50)

@HireDatedatetime

@CurrentFlagdbo.Flag

uspUpdateEmployeePersonalInfo

Actualiza la tabla Employee con los valores especificados en los parámetros de entrada para el EmployeeID especificado.

@EmployeeID int

@NationalIDNumbernvarchar(15)

@BirthDatedatetime

@MaritalStatusnchar(1)

@Gendernchar(1)

Ejemplos

A. Usar dbo.uspGetBillOfMaterials

En el ejemplo siguiente se ejecuta el procedimiento almacenado uspgetBillOfMaterials. El procedimiento devuelve una lista jerárquica de los componentes que se utilizan para fabricar el producto Road-550-W Yellow, 44 (ProductID800).

USE AdventureWorks;
GO
DECLARE @CheckDate DATETIME;
SET @CheckDate = GETDATE();
EXEC [AdventureWorks].[dbo].[uspGetBillOfMaterials] 800, @CheckDate;

B. Usar dbo.uspGetEmployeeManagers

En el ejemplo siguiente se ejecuta el procedimiento almacenado uspGetEmployeeManagers. El procedimiento devuelve una lista jerárquica de los directores directos e indirectos para EmployeeID 50.

USE AdventureWorks;
GO
EXEC dbo.uspGetEmployeeManagers 50;

C. Usar dbo.uspGetManagerEmployees

En el ejemplo siguiente se ejecuta el procedimiento almacenado uspGetManagerEmployees. El procedimiento devuelve una lista jerárquica de los empleados directos e indirectos que informan a ManagerID 140.

USE AdventureWorks;
GO
EXEC dbo.uspGetManagerEmployees 140;

D. Usar dbo.uspGetWhereUsedProductID

En el ejemplo siguiente se ejecuta el procedimiento almacenado usp_getWhereUsedProductID. El procedimiento devuelve todos los productos que utilizan el producto ML Road Front Wheel (ProductID 819)

USE AdventureWorks
GO
DECLARE @CheckDate datetime;
SET @CheckDate = GETDATE();
EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;

E. Usar HumanResources.uspUpdateEmployeeHireInfo

En el ejemplo siguiente se ejecuta el procedimiento almacenado uspUpdateEmployeeHireInfo. El procedimiento actualiza las columnas Title, HireDate y Current Flag de la tabla Employee para el EmployeeID especificado e inserta una fila nueva en la tabla EmployeePayHistory con los valores para EmployeeID, RateChangeDate, Rate y PayFrequency. Deben especificarse los valores de todos los parámetros.

USE AdventureWorks;
GO
EXEC [HumanResources].[uspUpdateEmployeeHireInfo]
    @EmployeeID = 109, 
    @Title = N'President', 
    @HireDate = '19980513',
    @RateChangeDate = '20041208', 
    @Rate = 50.00, 
    @PayFrequency = 1, 
    @CurrentFlag = 1;

F. Usar HumanResources.uspUpdateEmployeeLogin

En el ejemplo siguiente se ejecuta el procedimiento almacenado uspUpdateEmployeeLogin. El procedimiento actualiza las columnas ManagerID, LoginID, Title, HireDate y Current Flag de la tabla Employee para EmployeeID 6. Deben especificarse los valores de todos los parámetros.

USE AdventureWorks;
GO
DECLARE @HireDate datetime;
SET @HireDate = CONVERT(DATETIME,'19990619',101);
EXEC HumanResources.uspUpdateEmployeeLogin
    @EmployeeID = 6, 
    @ManagerID = 273,
    @LoginID = N'adventure-works\david01',
    @Title = N'Marketing Vice President', 
    @HireDate = @HireDate,
    @CurrentFlag = 1 ;

G. Usar HumanResources.uspUpdateEmployeePersonalInfo

En el ejemplo siguiente se ejecuta el procedimiento almacenado uspUpdateEmployeePersonalInfo. El procedimiento actualiza las columnas NationalIDNumber, BirthDate, MaritalStatue y Gender de la tabla Employee para EmployeeID 6. Deben especificarse los valores de todos los parámetros.

USE AdventureWorks;
GO
EXEC HumanResources.uspUpdateEmployeePersonalInfo
    @EmployeeID = 6, 
    @NationalIDNumber = N'123-45-6789',
    @BirthDate = '19651030',
    @MaritalStatus = N'S', 
    @Gender = N'M';
GO

H. Usar dbo.uspLogError

En el ejemplo siguiente se intenta eliminar el producto Mountain-400-W Silver, 38 (ProductID 980) de la tabla Production.Product. Una restricción FOREIGN KEY de la tabla no permite que la operación de supresión se ejecute correctamente, y el error de infracción de la restricción pasa el control al bloque CATCH. El código del bloque CATCH comprueba primero si hay transacciones activas y las deshace antes de ejecutar el procedimiento almacenado uspLogError. Este procedimiento escribe la información de error en la tabla ErrorLog y devuelve el ErrorLogID de la fila insertada en el parámetro @ErrorLogID OUTPUT. El valor predeterminado del parámetro @ErrorLogID es 0. La tabla ErrorLog se consulta a continuación para ver los resultados del procedimiento almacenado.

USE AdventureWorks;
GO
BEGIN TRY
    BEGIN TRANSACTION;
    DELETE FROM Production.Product
        WHERE ProductID = 980;
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    IF XACT_STATE() <> 0
        ROLLBACK TRANSACTION;
    DECLARE @ErrorLogID INT;
    EXECUTE dbo.uspLogError @ErrorLogID = @ErrorLogID OUTPUT;
END CATCH;
GO
--View the results of the uspLogError stored procedure
SELECT * FROM dbo.ErrorLog;

I. Usar dbo.uspPrintError

En el ejemplo siguiente se intenta eliminar el producto Mountain-400-W Silver, 38 (ProductID980) de la tabla Production.Product. Una restricción FOREIGN KEY de la tabla no permite que la operación de supresión se ejecute correctamente, y el error de infracción de la restricción pasa el control al bloque CATCH. El código del bloque CATCH ejecuta el procedimiento almacenado uspPrintError. Este procedimiento imprime la información de error.

USE AdventureWorks;
GO
BEGIN TRY
    DELETE FROM Production.Product
        WHERE ProductID = 980;
END TRY
BEGIN CATCH
    EXECUTE dbo.uspPrintError;
END CATCH;
GO