《MS SQL Server 2000管理员手册》系列——21. 建立及管理预存程序[4]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

CREATE PROCEDURE GetUnitPrice @prod_id int = NULL
AS
IF @prod_id IS NULL
   BEGIN
      PRINT "Please enter a product ID number"
      RETURN
   END
ELSE
   BEGIN
      SELECT  UnitPrice
      FROM    Products
      WHERE   ProductID = @prod_id
   END
GO
现在请不要输入 ProductID 值来执行GetUnitPrice并看看结果。由于呼叫程序陈述式并非该批次操作中的第一个陈述式,因次必须使用 EXECUTE 陈述式执行预存程序。程序代码如下:
PRINT "Before procedure"
EXECUTE GetUnitPrice
PRINT "After procedure returns from stored procedure"
GO
输出结果显示如下:
Before procedure
Please enter a product ID number
After procedure returns from stored procedure
由第二个 PRINT 陈述式可看出,当预存程序执行 RETURN 时,批次操作在 PRINT 陈述式处开始继续执行。
现在使用 RETURN 来传回值到呼叫程序中。传回的值必须是一个整数,常数或变量皆可。变量必须透过宣告才可在呼叫程序中使用。举例来说,当输入参数为单价少于 $100 的产品,传回值 1,否则传回 99。
CREATE PROCEDURE CheckUnitPrice @prod_id int
AS
IF (SELECT  UnitPrice
    FROM    Products
    WHERE   ProductID = @prod_id) < 100
    RETURN 1
ELSE
    RETURN 99
GO
为了呼叫预存程序并能使用传回值,在呼叫程序中宣告变量并将该变量设为预存程序的传回值,(输入参数使用 ProductID 值 66),程序代码如下:
DECLARE @return_val int
EXECUTE @return_val = CheckUnitPrice 66
IF (@return_val = 1) PRINT 'Unit price is less than $100'
GO
由于指定的产品单价为 $17,因此传回值为 1,并打印 Unit price is less than $100。当变量用于保存传回值时,记住其数据型别必须被宣告为整数,这是 RETURN 陈述式的要求。
使用 SELECT 传回值
 
在预存程序中可以使用 SELECT 陈述式传回数据,您可以从 SELECT 查询或传回变量值中传回结果集。
现在来看看几个范例。首先建立一个预存程序,命名为PrintUnitPrice,该预存程序会传回输入参数所指定的产品单价(透过 ProductID),程序代码如下:
CREATE PROCEDURE PrintUnitPrice @prod_id int
AS
SELECT  ProductID,
        UnitPrice
FROM    Products
WHERE   ProductID = @prod_id
GO
将 66 作为输入参数值呼叫该程序:
PrintUnitPrice 66
GO
结果看起来像这样:
ProductID       UnitPrice
----------      ------------
        66      17.0000
(影响 1 个数据列)
要使用 SELECT 陈述式传回变量值,请在陈述式后面接着输入变量名称。在下面的范例中,我们会重建CheckUnitPrice预存程序,传回一变量值,并指定输出标题:
USE Northwind
GO

IF EXISTS (SELECT  name
           FROM    sysobjects
           WHERE   name = "CheckUnitPrice" AND
                   type = "P")
DROP PROCEDURE CheckUnitPrice
GO

CREATE PROCEDURE CheckUnitPrice @prod_id INT
AS
DECLARE @var1 int
IF (SELECT  UnitPrice
    FROM    Products
    WHERE   ProductID = @prod_id) > 100
    SET     @var1 = 1
ELSE
    SET     @var1 = 99
SELECT "Variable 1" = @var1
PRINT "Can add more TSQL statements here"
GO
将 66 作为输入参数值呼叫该程序:
CheckUnitPrice 66
GO
执行该预存程序的输出结果如下:
Variable    1
-------------
           99

(影响 1 个数据列)

Can add more T-SQL statements here
我们打印 Can add more T-SQL statements here 以强调使用 SELECT 传回值与使用 RETURN 传回值之间的差别。当呼叫 RETURN 时,预存程序跟着结束;当呼叫 SELECT 时,预存程序则在 SELECT 传回结果集后,继续执行。
在前面的范例中,如果没有指定输出标题,只使用SELECT @varl,输出结果将没有标题,如下所示:
(没有数据行名称)
---------------
99

本文关键:《MS SQL Server 2000管理员手册》系列——21. 建立及管理预存程序
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top