Procedimentos armazenados na AdventureWorks
O banco de dados de OLTP AdventureWorks inclui vários procedimentos armazenados Transact-SQL. Exemplos de procedimentos armazenados CLR (Common Language Runtime) podem ser baixados da home page Exemplos e projetos comunitários do Microsoft SQL Server (em inglês).
Procedimentos armazenados CLR
A tabela a seguir lista os exemplos de procedimentos armazenados CLR disponíveis. Para obter mais informações sobre os procedimentos armazenados CLR, consulte Procedimentos armazenados CLR.
Exemplo |
Descrição |
---|---|
AdventureWorks Cycles CLR Layer |
Procedimento armazenado baseado em C# que assume os dados xml como entradas e insere dados em colunas da tabela Person.Contact. |
Procedimentos armazenados Transact-SQL
A tabela a seguir lista os procedimentos armazenados Transact-SQL incluídos no banco de dados de exemplo AdventureWorks de OLTP. Para obter mais informações sobre os procedimentos armazenados Transact-SQL, consulte Compreendendo os procedimentos armazenados.
Procedimento armazenado |
Descrição |
Parâmetros de entrada |
---|---|---|
dbo.uspGetBillOfMaterials |
Usa uma consulta recursiva (expressão de tabela comum) para gerar uma lista de materiais de vários níveis: todos os componentes de nível 1 de um assembly de nível 0; todos os componentes de nível 2 de um assembly de nível 1, e assim por diante. |
@StartProductIDint @CheckDatedatetime |
dbo.uspGetEmployeeManagers |
Usa uma consulta recursiva (expressão de tabela comum) para retornar os gerentes diretos e indiretos de determinado funcionário. |
@EmployeeIDint |
dbo.uspGetManagerEmployees |
Usa uma consulta recursiva (expressão de tabela comum) para retornar os funcionários diretos e indiretos de determinado gerente. |
@ManagerIDint |
dbo.uspLogError |
Registra na tabela dbo.ErrorLog informações sobre o erro que causou que a execução saltasse para o bloco CATCH de uma construção TRY... CATCH. Esse procedimento deve ser executado no escopo de um bloco CATCH; do contrário retornará sem inserir informações de erro. |
@ErrorLogIDint = 0 OUTPUT |
dbo.uspPrintError |
Imprime informações sobre o erro que fez com que execução saltasse para o bloco CATCH de uma construção TRY... CATCH. Esse procedimento deve ser executado do escopo de um bloco CATCH; do contrário retornará sem imprimir nenhuma informação sobre o erro. |
Nenhum |
dbo.uspGetWhereUsedProductID |
Usa uma consulta recursiva (expressão de tabela comum) para retornar todos os assemblies de produtos que usam o componente de produto especificado. Por exemplo, retornar todas as bicicletas que usam determinado tipo de roda ou pintura. |
@StartProductIDint @CheckDatedatetime |
uspUpdateEmployeeHireInfo |
Atualiza a tabela Employee e insere uma fila nova na tabela EmployeePayHistory com os valores especificados nos parâmetros de entrada. |
@EmployeeIDint @Titlenvarchar(50) @HireDatedatetime @RateChangeDatedatetime @Ratemoney @PayFrequencytinyint @CurrentFlagdbo.Flag |
uspUpdateEmployeeLogin |
Atualiza a tabela Employee com os valores especificados nos parâmetros de entrada de um EmployeeID específico. |
@EmployeeID int @ManagerIDint @LoginIDnvarchar(256) @Titlenvarchar(50) @HireDatedatetime @CurrentFlagdbo.Flag |
uspUpdateEmployeePersonalInfo |
Atualiza a tabela Employee com os valores especificados nos parâmetros de entrada de um EmployeeID específico. |
@EmployeeID int @NationalIDNumbernvarchar(15) @BirthDatedatetime @MaritalStatusnchar(1) @Gendernchar(1) |
Exemplos
A. Usando dbo.uspGetBillOfMaterials
O exemplo a seguir executa o procedimento armazenado uspgetBillOfMaterials. O procedimento retorna uma lista hierárquica de componentes usados para fabricar o produto 44, Road-550-W, amarelo (ProductID800).
USE AdventureWorks;
GO
DECLARE @CheckDate DATETIME;
SET @CheckDate = GETDATE();
EXEC [AdventureWorks].[dbo].[uspGetBillOfMaterials] 800, @CheckDate;
B. Usando dbo.uspGetEmployeeManagers
O exemplo a seguir executa o procedimento armazenado uspGetEmployeeManagers. O procedimento retorna uma lista hierárquica de gerentes diretos e indiretos para EmployeeID 50.
USE AdventureWorks;
GO
EXEC dbo.uspGetEmployeeManagers 50;
C. Usando dbo.uspGetManagerEmployees
O exemplo a seguir executa o procedimento armazenado uspGetManagerEmployees. O procedimento retorna uma lista hierárquica de funcionários diretos e indiretos que se reportam a ManagerID 140.
USE AdventureWorks;
GO
EXEC dbo.uspGetManagerEmployees 140;
D. Usando dbo.uspGetWhereUsedProductID
O exemplo a seguir executa o procedimento armazenado usp_getWhereUsedProductID. O procedimento retorna todos os produtos que usam o produto de roda dianteira ML Road (ProductID 819)
USE AdventureWorks
GO
DECLARE @CheckDate datetime;
SET @CheckDate = GETDATE();
EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;
E. Usando HumanResources.uspUpdateEmployeeHireInfo
O exemplo a seguir executa o procedimento armazenado uspUpdateEmployeeHireInfo. O procedimento atualiza as colunas Title, HireDate e Current Flag na tabela Employee para o EmployeeID especificado e insere uma nova linha na tabela EmployeePayHistory, com valores de EmployeeID, RateChangeDate, Rate e PayFrequency. Todos os valores de parâmetro devem ser especificados.
USE AdventureWorks;
GO
EXEC [HumanResources].[uspUpdateEmployeeHireInfo]
@EmployeeID = 109,
@Title = N'President',
@HireDate = '19980513',
@RateChangeDate = '20041208',
@Rate = 50.00,
@PayFrequency = 1,
@CurrentFlag = 1;
F. Usando HumanResources.uspUpdateEmployeeLogin
O exemplo a seguir executa o procedimento armazenado uspUpdateEmployeeLogin. O procedimento atualiza ManagerID, LoginID, Title, HireDate e as colunas Current Flag da Employee tabela, para EmployeeID 6. Todos os valores de parâmetro devem ser especificados.
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. Usando HumanResources.uspUpdateEmployeePersonalInfo
O exemplo a seguir executa o procedimento armazenado uspUpdateEmployeePersonalInfo. O procedimento atualiza as colunas NationalIDNumber, BirthDate, MaritalStatue e Gender na tabela Employee, para EmployeeID 6. Todos os valores de parâmetro devem ser especificados.
USE AdventureWorks;
GO
EXEC HumanResources.uspUpdateEmployeePersonalInfo
@EmployeeID = 6,
@NationalIDNumber = N'123-45-6789',
@BirthDate = '19651030',
@MaritalStatus = N'S',
@Gender = N'M';
GO
H. Usando dbo.uspLogError
O exemplo a seguir tenta excluir o produto 38, Mountain-400-W, prata (ProductID 980) da tabela Production.Product. Uma restrição de CHAVE ESTRANGEIRA da tabela não permite o êxito da operação de exclusão e o erro de violação de restrição passa o controle para o bloco CATCH. O código dentro do bloco CATCH verifica primeiramente todas as transações ativas, revertendo-as antes de executar o procedimento armazenado uspLogError. Esse procedimento insere as informações de erro na tabela ErrorLog e retorna o ErrorLogID da fila inserida no parâmetro @ErrorLogID OUTPUT. O parâmetro @ErrorLogID tem valor padrão de 0. Em seguida, a tabela ErrorLog é consultada para que os resultados do procedimento armazenado sejam exibidos.
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. Usando dbo.uspPrintError
O exemplo a seguir tenta excluir o produto 38, Mountain-400-W, prata, (ProductID980) da tabela Production.Product. Uma restrição de CHAVE ESTRANGEIRA da tabela não permite o êxito da operação de exclusão, e o erro de violação de restrição passa o controle para o bloco CATCH. O código dentro do bloco CATCH executa o procedimento armazenado uspPrintError. Esse procedimento imprime as informações de erro.
USE AdventureWorks;
GO
BEGIN TRY
DELETE FROM Production.Product
WHERE ProductID = 980;
END TRY
BEGIN CATCH
EXECUTE dbo.uspPrintError;
END CATCH;
GO
Consulte também