Udostępnij za pośrednictwem


Procedury przechowywanej w AdventureWorks

The AdventureWorks sample OLTP database includes several Transact-SQL stored procedures.Przykłady typowych procedur przechowywanych plików wykonywalnych (CLR) języka są dostępne w Przykłady programowania do środowiska CLR.

Środowisko CLR przechowywanych procedur

Poniższa lista zawiera przykłady procedury CLR przechowywane, które są dostępne.Aby uzyskać więcej informacji na temat środowiska CLR przechowywane procedury zobacz Środowisko CLR przechowywanych procedur.

Przykład

Description

AdventureWorks Cycles CLR Layer

C# — podstawie procedura przechowywana, które przekieruje xml dane jego dane wejściowe, jak i wstawia dane do kolumn w Person.Contact tabela.

Procedury przechowywanej języka Transact-SQL

Następujące tabela list Transact-SQL przechowywane procedury, które są uwzględnione w AdventureWorks Przykładowa baza danych OLTP. Aby uzyskać więcej informacji na temat Transact-SQL procedury przechowywane, zobacz Understanding Stored Procedures.

Procedura przechowywana

Description

Parametry wejściowe

dbo.uspGetBillOfMaterials

Używa kwerendy cyklicznej (typowe wyrażenie tabela), aby wygenerować wielopoziomowej faktury z materiału: wszystkie na poziomie 1 składniki wirtualny plik dziennika poziom 0, wszystkie poziom 2 składników wirtualny plik dziennika poziomu 1 i tak dalej.

@StartProductIDint

@CheckDatedatetime

dbo.uspGetEmployeeManagers

Użyto kwerendy cyklicznej (typowe wyrażenie tabela), aby zwrócić menedżerów bezpośrednie i pośrednie dla określonego pracownika.

@EmployeeIDint

dbo.uspGetManagerEmployees

Użyto kwerendy cyklicznej (typowe wyrażenie tabela), aby zwrócić pracowników bezpośrednich i pośrednich określonej menedżera.

@ManagerIDint

dbo.uspLogError

Rejestruje informacje o błędach w dbo.ErrorLog tabela o błąd, który spowodował wykonanie przejść do blok CATCH konstrukcji TRY... CATCH.Ta procedura powinna być wykonywane z poziomu zakres blok CATCH; w przeciwnym razie, to zostanie zwrócona bez wstawiania informacji o błędzie.

@ErrorLogIDint = 0 OUTPUT

dbo.uspPrintError

Drukuje informacje o błędzie o błąd, który spowodował wykonanie przejść do blok CATCH konstrukcji TRY... CATCH.Ta procedura powinna być wykonywane w programie w zakresie blok CATCH; w przeciwnym razie będzie zwracać bez drukowania informacje o błędzie.

None

dbo.uspGetWhereUsedProductID

Użyto kwerendy cyklicznej (typowe wyrażenie tabela), aby zwrócić wszystkie zespoły produktu, które używają składnika określonego produktu.Na przykład zwracają wszystkie rowery, korzystających z określonego koła lub typ farby.

@StartProductIDint

@CheckDatedatetime

uspUpdateEmployeeHireInfo

Aktualizacje Pracownika tabela i wstawia nowy wiersz w EmployeePayHistory tabela z wartości określone w parametrach wejściowych.

@EmployeeIDint

@Titlenvarchar(50)

@HireDatedatetime

@RateChangeDatedatetime

@Ratemoney

@PayFrequencytinyint

@CurrentFlagdbo.Flag

uspUpdateEmployeeLogin

Aktualizacje Pracownika wartości określone w parametrach wejściowych dla określonego tabelaPole IDPracownika.

@ IDPracownika. int

@ManagerIDint

@LoginIDnvarchar(256)

@Titlenvarchar(50)

@HireDatedatetime

@CurrentFlagdbo.Flag

uspUpdateEmployeePersonalInfo

Aktualizacje Pracownika wartości określone w parametrach wejściowych dla określonego tabelaPole IDPracownika.

@ IDPracownika. int

@NationalIDNumbernvarchar(15)

@BirthDatedatetime

@MaritalStatusnchar(1)

@Gendernchar(1)

Przykłady

A.Za pomocą dbo.uspGetBillOfMaterials

Poniższy przykład działa uspgetBillOfMaterials Procedura przechowywana. The procedure returns a hierarchical list of components used to manufacture the Road-550-W Yellow, 44 product (ProductID800).

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

B.Za pomocą dbo.uspGetEmployeeManagers

Poniższy przykład działa uspGetEmployeeManagers Procedura przechowywana. Procedura zwraca hierarchiczną listę menedżerów bezpośrednie i pośrednie dla EmployeeID 50.

USE AdventureWorks;
GO
EXEC dbo.uspGetEmployeeManagers 50;

C.Za pomocą dbo.uspGetManagerEmployees

Poniższy przykład działa uspGetManagerEmployees Procedura przechowywana. Procedura zwraca hierarchiczną listę pracowników bezpośrednie i pośrednie tworzenie raportów ManagerID 140.

USE AdventureWorks;
GO
EXEC dbo.uspGetManagerEmployees 140;

D.Za pomocą dbo.uspGetWhereUsedProductID

Poniższy przykład działa usp_getWhereUsedProductID Procedura przechowywana. Procedura zwraca zwrotu wszystkie produkty, które używają produktów (CAPTIONML Road Front kołoProductID 819)

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

E.Za pomocą HumanResources.uspUpdateEmployeeHireInfo

Poniższy przykład działa uspUpdateEmployeeHireInfo Procedura przechowywana. Aktualizacje procedury Title, HireDate, a Current Flag kolumny w Employee Tabela dla określonego EmployeeID i wstawia nowy wiersz w EmployeePayHistory Tabela z wartościami dla EmployeeID, RateChangeDate, Rate i PayFrequency. Wszystkie wartości parametru musi być określona.

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

F.Za pomocą HumanResources.uspUpdateEmployeeLogin

Poniższy przykład działa uspUpdateEmployeeLogin Procedura przechowywana. Aktualizacje procedury ManagerID, LoginID, Title, HireDate, a Current Flag kolumny w Employee Tabela EmployeeID 6. Wszystkie wartości parametru musi być określona.

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.Za pomocą HumanResources.uspUpdateEmployeePersonalInfo

Poniższy przykład działa uspUpdateEmployeePersonalInfo Procedura przechowywana. Aktualizacje procedury NationalIDNumber, BirthDate, MaritalStatue, a Gender kolumny w Employee Tabela EmployeeID 6. Wszystkie wartości parametru musi być określona.

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

H.Za pomocą dbo.uspLogError

W poniższym przykładzie próbuje usunąć produktów Mountain-400-W Silver, 38)ProductID 980) z Production.Product Tabela. Ograniczenia klucz obcy dla tabela nie zezwala na usuwanie operacja powiodła się, a błąd naruszenia zasad ograniczenie przekazuje sterowanie do CATCH blok. Kod wewnątrz CATCH Zablokuj pierwszą czeków dla wszystkich aktywnych transakcji i rolkach ich kopii przed rozpoczęciem wykonywania uspLogError Procedura przechowywana. Procedura ta wprowadza informacje o błędzie w ErrorLog Tabela i zwraca ErrorLogID w wierszu do @ErrorLogID OUTPUT parametr. The @ErrorLogID parameter has a default value of 0.The ErrorLog tabela is then queried to view the wyniki of the procedura przechowywana.

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.Za pomocą dbo.uspPrintError

The following example tries to delete the product Mountain-400-W Silver, 38 (ProductID980) from the Production.Product table.Ograniczenia klucz obcy dla tabela nie zezwala na usuwanie operacja powiodła się, a błąd naruszenia zasad ograniczenie przekazuje sterowanie do CATCH blok. Kod wewnątrz CATCH wykonuje blok uspPrintError Procedura przechowywana. Ta procedura umożliwia drukowanie informacji o błędzie.

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