创建带输入参数的存储过程
语法
create proc[edure] 存储过程名
@参数1 数据类型=默认值,
……
@参数n 数据类型=默认值
as
sql语句
go --必须要加批处理的go
例子:
1 --创建带输入参数的存储过程 2 /* 3 题目:查询指定的用户在指定的时间段内的下单信息, 4 如果结束日期没有指的话,那么查询的是到今天为止的下单信息 5 */ 6 use E_Market 7 go 8 if exists (select * from sysobjects where name='usp_GetOrderInfo') 9 drop proc usp_GetOrderInfo10 go11 create proc usp_GetOrderInfo12 @startDate datetime, --开始时间13 @endDate datetime=null, --结束时间14 @userId varchar(20)=null --指定的用户15 as16 if @endDate is null --判断结束日期是否为空17 begin18 set @endDate=GETDATE() --赋值当前日期19 end20 21 if @userId is null --查询指定时间段内的所有订单信息22 begin23 select O.UserId as 用户号, PayWay as 付款方式, O.Amount as 购买数量,C.CommodityName as 商品名称,24 S.SortName as 类别名称, O.OrderTime as 下单时间 from OrderInfo as O 25 inner join CommodityInfo as C on O.CommodityId=C.CommodityId26 inner join CommoditySort as S on C.SortId=S.SortId27 where O.OrderTime between @startDate and @endDate28 end29 30 else --查询指定用户指定时间段内的所有订单信息31 begin 32 select O.UserId as 用户号, PayWay as 付款方式, O.Amount as 购买数量,C.CommodityName as 商品名称,33 S.SortName as 类别名称, O.OrderTime as 下单时间 from OrderInfo as O 34 inner join CommodityInfo as C on O.CommodityId=C.CommodityId35 inner join CommoditySort as S on C.SortId=S.SortId36 where O.UserId=@userId and O.OrderTime between @startDate and @endDate37 end38 go39 40 --如何使用带参数的存储过程41 --1)结束日期与用户都使用默认值42 --只指定了开始时间,查询的是从开始时间到今天的所有订单信息43 exec usp_GetOrderInfo '2014-11-1'44 45 --2)结束日期不为空,从开始时间到结束时间的所有订单信息46 --隐式调用,参数的顺序必须与创建存储过程的参数顺序完全相同47 exec usp_GetOrderInfo '2014-11-1', '2014-11-12','xiangxiang'48 49 --3)显示调用50 --显示调用对参数顺序无要求,如果参数中一个写"@名称=值"的形式,之后的参数都必须写成"@名称=值"的形式,默认值可以使用default代替51 exec usp_GetOrderInfo @UserId='xiangxiang',@startDate='2014-11-1',@endDate=default52 53 54 --4)可以通过声明变量来调用55 declare @d1 datetime,@d2 datetime, @uid varchar(20)56 set @d1='2014-11-1'57 set @d2='2014-12-1'58 set @uid='xiangxiang'59 exec usp_GetOrderInfo @d1,@d2,@uid60 --除了显示调用外,要求参数位置必须与存储过程定义时顺序相同