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

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~
...全文
58 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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是不对的吧

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧