您的位置:首页 > 其它

创建带输入参数的存储过程

2016-02-19 00:03 218 查看
创建带输入参数的存储过程

带输入参数的存储过程的

语法

CREATE PROC[EDURE] 存储过程名
@参数1 数据类型=默认值,
……
@参数n 数据类型=默认值
AS
SQL语句
GO --必须要加批处理的GO

--创建带输入参数的存储过程
/*
目标:查询指定的用户在指定的事件段内的下单信息,
如果结束日期没有指的话,那么查询的是当今天为止的下单信息
*/
USE E_Market
GO

IF EXIST(SELECT * FROM sysobjects WHERE name='usp_GetOrderInfo')
DROP PROC usp_GetOrderInfo
GO

CREATE PROC usp_GetOrderInfo
@startDate datetime, --开始时间
@endDate datetime=null, --结束时间
@userId varchar(20)=null --指定的用户
AS
IF @endDate IS NULL --判断结束日期日否为空
BEGIN
SET @endDate=GETDATE() --赋当前日期
END
IF @userId IS NULL --查询指定时间端内的所有订单信息
BEGIN
SELECT C.CommodityName AS 商品名称,S.SortName AS 类别名称,O.UserId AS 用户名,O.OrderTime AS 下单时间 FROM OrderInfo AS O
INNER JOIN CommodityInfo AS C ON O.CommodityId=C.CommodityId
INNER JOIN CommoditySort AS C ON O.SortId=C.SortId
WHERE O.OrderTime BETWEEN @startDate AND @endDate
END
ELSE --查询指定用户指定时间段内的所有订单信息
BEGIN
SELECT C.CommodityName AS 商品名称,S.SortName AS 类别名称,O.UserId AS 用户名,O.OrderTime AS 下单时间 FROM OrderInfo AS O
INNER JOIN CommodityInfo AS C ON O.CommodityId=C.CommodityId
INNER JOIN CommoditySort AS C ON O.SortId=C.SortId
WHERE (O.OrderTime BETWEEN @startDate AND @endDate)
AND O.UserId=@userId
END
GO --存储过程结束

--如何使用带参数的存储过程
--1)结束日期与用户都是使用默认值
--只指定了开始时间,查询的是从开始时间到今天的所有订单信息
EXEC usp_GetOrderInfo '2016-02-01'

--2)结束日期不为空,从开始时间到结束时间的所有订单信息
--隐式调用,参数的顺序必须于创建存储过程的参数顺序完全相同
EXEC usp_GetOrderInfo '2015-02-01','2016-02-01','xingcheng'

--3)显示调用
--显示调用对参数顺序无要求,如查参数中一个写"@名称=值"的形式
--之后的参数都必须写成"@名称=值"的形式,默认值可以使用default代替也可以不写
EXEC usp_GetOrderInfo @startDate='2015-02-01',@endDate='2016-02-01',@userId='xingcheng'

--显示调用是的@UserId,@startDate,@endDate是存储过程定义的参数

--4)可以通过声明变量来调用
DECLARE @d1 datetime,@d2 datetime,@uid varchar(20)
SET @d1='2015-02-01'
SET @d2='2016-02-1'
SET @uid='xingcheng'
EXEC usp_GetOrderInfo @d1,@d2,@d3

--除了显示调用之外,要求参数位置必须于存储过程定义时顺序必须相同
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: