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

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

本文简介:

CREATE PROCEDURE LateShipments
AS
SELECT  RequiredDate,
        ShippedDate,
        Shippers.CompanyName
FROM    Orders, Shippers
WHERE   ShippedDate     > RequiredDate AND
        Orders.ShipVia  = Shippers.ShipperID
GO
执行上述的 T-SQL 程序代码就会建立预存程序,要执行该预存程序,只要呼叫其名称:
LateShipments
GO
LateShipments会传回 37 列资料。
如果呼叫该预存程序的陈述式是一个批次中的陈述式,并且不是该批次操作的第一个陈述式,就必须使用 EXECUTE(可缩写为 EXEC)关键词呼叫,使用范例如下:
SELECT getdate ( )
EXECUTE LateShipments
GO
如果呼叫程序的陈述式为该批次操作的第一个陈述式,或为该批次操作的唯一陈述式,您也可以不使用 EXECUTE 关键词。
使用参数
 
接下来让我们在这个预存程序中,新增一个输入参数,以便在呼叫预存程序时,同时也传递参数给预存程序。要想在预存程序中指定输入参数,请以 @ 前缀为参数名称的前置字,例如@parameter_name,一个预存程序可指定高达 1024 个参数。在范例中,将建立@ShipperName的参数。当执行预存程序时,输入船公司名称,该查询就只会传回该船公司的数据列,其 T-SQL 陈述式如下:
USE Northwind
GO

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

CREATE PROCEDURE LateShipments @shipperName char(40)
AS
SELECT  RequiredDate,
        ShippedDate,
        Shippers.CompanyName
FROM    Orders, Shippers
WHERE   ShippedDate             > RequiredDate AND
        Orders.ShipVia          = Shippers.ShipperID AND
        Shippers.CompanyName    = @shipperName
GO
执行此预存程序时,必须先提供输入参数,否则会显示如下的错误讯息:
服务器:讯息 201,层级 16,状态 4,程序 LateShipments,行 0
程序 'LateShipments' 预期使用未提供的参数 '@shipperName'
想为 Speedy Express 这家船公司传回符合要求的数据列,请执行以下陈述式:
USE Northwind
GO
EXECUTE LateShipments "Speedy Express"
GO
该预存程序将传回 12 个数据列。
您也可以为参数设定默认值,它将适用于当呼叫预存程序时没有参数的情况。举例来说,我们将预存程序的参数默认值设为 United Package,其 T-SQL 预存程序程序代码变更如下(只变更 CREATE PROCEDURE 行):
USE Northwind
GO
IF EXISTS (SELECT  name
           FROM    sysobjects
           WHERE   name = "LateShipments" AND
                   type = "P")
DROP PROCEDURE LateShipments
GO

CREATE PROCEDURE LateShipments @shipperName char(40) = "United
Package"
AS
SELECT  RequiredDate,
        ShippedDate,
        Shippers.CompanyName
FROM    Orders, Shippers
WHERE   ShippedDate          > RequiredDate AND
        Orders.ShipVia       = Shippers.ShipperID AND
        Shippers.CompanyName = @shipperName
GO
如果在执行LateShipments时没有提供参数,预存程序将使用United Package为@ShipperName的默认值(并传回 16 个数据列)。即使预设参数已经确定,仍然可以提供输入参数,此参数会覆写默认值。
如果您想在预存程序中传回值给呼叫程序,请在参数名称后使用 OUTPUT 关键词。要将值储存在变量中以供呼叫预存程序的应用程序使用,也可以在呼叫该预存程序时,使用 OUTPUT 关键词。让我们实际操作一个范例,首先建立新的预存程序以为某个产品选择单价,@prod_id为 ProductID 的输入参数,@unit_price输出参数将传回单价,名称为@price的区域变量将在呼叫程序中被宣告,并用于储存传回值。下面是用于建立GetUnitPrice预存程序的程序代码:
USE Northwind
GO

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

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

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

go top