存储过程新手疑惑~望高手帮忙解答下~

davidcoffee 2011-03-01 03:37:24
USE AdventureWorks;
GO
IF OBJECT_ID ( 'Production.usp_GetList', 'P' ) IS NOT NULL
DROP PROCEDURE Production.usp_GetList;
GO
CREATE PROCEDURE Production.usp_GetList @product varchar(40)
, @maxprice money
, @compareprice money OUTPUT
, @listprice money OUT
AS
SELECT p.name AS Product, p.ListPrice AS 'List Price'
FROM Production.Product p
JOIN Production.ProductSubcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID
WHERE s.name LIKE @product AND p.ListPrice < @maxprice;
-- Populate the output variable @listprice.
SET @listprice = (SELECT MAX(p.ListPrice)
FROM Production.Product p
JOIN Production.ProductSubcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID
WHERE s.name LIKE @product AND p.ListPrice < @maxprice);
-- Populate the output variable @compareprice.
SET @compareprice = @maxprice;
GO
该段存储过程是返回其价格不超过指定金额的产品列表
网上百度了下说OUTPUT是输出参数,OUT是普通输入参数,所以不明白如果OUT是输入参数那@product, @maxprice money
这两个输入参数和有OUT声明的有什么区别吗,还有就是SET @listprice 取得产品价格中的最大值是做什么用的,因为指定金额不是用 @maxprice money传入进来的吗~麻烦高手解惑~3Q~
...全文
33 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
davidcoffee 2011-03-01
[Quote=引用 3 楼 linares 的回复:]
真忽悠,看看MSDN,OUT/OUTPUT是等价的

CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ] ……
[/Quote]
哦got it~散分了~
回复
Rotel-刘志东 2011-03-01
USE AdventureWorks;
GO
IF OBJECT_ID ( 'Production.usp_GetList', 'P' ) IS NOT NULL
DROP PROCEDURE Production.usp_GetList;
GO
CREATE PROCEDURE Production.usp_GetList @product varchar(40)
, @maxprice money
, @compareprice money OUTPUT
, @listprice money OUT ---out不对
AS
SELECT p.name AS Product, p.ListPrice AS 'List Price'
FROM Production.Product p
JOIN Production.ProductSubcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID
WHERE s.name LIKE @product AND p.ListPrice < @maxprice;
-- Populate the output variable @listprice.
SET @listprice = (SELECT MAX(p.ListPrice)
FROM Production.Product p
JOIN Production.ProductSubcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID
WHERE s.name LIKE @product AND p.ListPrice < @maxprice);
-- Populate the output variable @compareprice.
SET @compareprice = @maxprice;
GO
回复
Linares 2011-03-01
真忽悠,看看MSDN,OUT/OUTPUT是等价的

CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]

SET @listprice 取得产品价格中的最大值是做什么用
@maxprice 是上限,不是实际的最大值

内事百度
外事谷歌
回复
davidcoffee 2011-03-01
[Quote=引用 1 楼 xys_777 的回复:]
OUTPUT 是关键字
out是不对的吧
[/Quote]
那输入参数就是不用out 直接@param_name这种就可以了吗?
回复
永生天地 2011-03-01
OUTPUT 是关键字
out是不对的吧
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2011-03-01 03:37
社区公告
暂无公告