代码改变世界

SQL存储过程实例练习(答案)

2012-06-20 21:12  GhostHorse  阅读(942)  评论(0编辑  收藏  举报

这篇是为了放 上篇 的小练习答案

 

1、写一个存储过程,该存储过程在给定CustomerID的参数下能返回Northwind数据库中的Customer记录。

2、写一个存储过程,该存储过程接受Territory  ID、 Territory Description 和Region ID为参数,并且将它们作为新行插入到Northwind数据库中的Territories表中去。

3、修改练习2中的存储过程,并在插入前预先检查外键(RegionID)的存在。如果RegionID不存在,则抛出一个含有错误消息为“RegionID is not valid。 Please check your RegionID and try again”的错误。

4、修改练习2中的存储过程,使之处理不存在RegionID时的异常。捕获所有其他类型错误并提供通用的错误消息“An unhandled exception has occurred. Contact your system administration”。

 

/*
1、写一个存储过程,该存储过程在给定CustomerID的参数下
    能返回Northwind数据库中的Customer记录。
*/
GO
USE Northwind

GO
CREATE PROC P_GetCustomerByID
@CustomerID NCHAR(5)
AS
SELECT * FROM dbo.Customers WHERE CustomerID=@CustomerID

GO
--EXEC P_GetCustomerByID 'ALFKI'

/*
2、写一个存储过程,该存储过程接受Territory  ID、 Territory Description 和Region ID为参数,
    并且将它们作为新行插入到Northwind数据库中的Territories表中去。
*/
GO
USE Northwind

GO
CREATE PROC p_InsertTerritories
@TerritoryID NVARCHAR(20),
@TerritoryDescription NCHAR(50),
@RegionID int
AS
BEGIN
INSERT INTO Territories 
(
    TerritoryID,
    TerritoryDescription,
    RegionID
)
VALUES
(
    @TerritoryID,
    @TerritoryDescription,
    @RegionID
)
END

--EXEC p_InsertTerritories '','',1
/*
3、修改练习2中的存储过程,
并在插入前预先检查外键(RegionID)的存在。
如果RegionID不存在,
则抛出一个含有错误消息为“RegionID is not valid。 Please check your RegionID and try again”的错误。
*/

GO
USE Northwind

GO
CREATE PROC p_InsertTerritories3
@TerritoryID NVARCHAR(20),
@TerritoryDescription NCHAR(50),
@RegionID int
AS
BEGIN
    IF (EXISTS(SELECT RegionID FROM Region WHERE RegionID=@RegionID ))
    BEGIN
        INSERT INTO Territories 
        (
            TerritoryID,
            TerritoryDescription,
            RegionID
        )
        VALUES
        (
            @TerritoryID,
            @TerritoryDescription,
            @RegionID
        )
    END
    ELSE
     RAISERROR(N'RegionID is not valid. Please check your RegionID and try again',10,1)
END

--EXEC p_InsertTerritories3 '','',0
/*
4、修改练习2中的存储过程,使之处理不存在RegionID时的异常。
捕获所有其他类型错误并提供通用的错误消息“An unhandled exception has occurred. Contact your system administration”。
*/
GO
USE Northwind

GO
CREATE PROC p_InsertTerritories4
@TerritoryID NVARCHAR(20),
@TerritoryDescription NCHAR(50),
@RegionID int
AS
BEGIN
    IF (EXISTS(SELECT RegionID FROM Region WHERE RegionID=@RegionID ))
    BEGIN
        Begin TRY
            INSERT INTO Territories 
            (
                TerritoryID,
                TerritoryDescription,
                RegionID
            )
            VALUES
            (
                @TerritoryID,
                @TerritoryDescription,
                @RegionID
            )
        END TRY
        Begin CATCH
            RAISERROR (N'An unhandled exception has occurred. Contact your system administration',10,1)
            RETURN
        END CATCH
    END
    ELSE 
        RAISERROR (N'RegionID is not valid. Please check your RegionID and try again',10,1)    
END

--exec p_InsertTerritories4 '','',1