创建带输入参数的存储过程
语法
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_GetOrderInfo 10 go 11 create proc usp_GetOrderInfo 12 @startDate datetime, --开始时间 13 @endDate datetime=null, --结束时间 14 @userId varchar(20)=null --指定的用户 15 as 16 if @endDate is null --判断结束日期是否为空 17 begin 18 set @endDate=GETDATE() --赋值当前日期 19 end 20 21 if @userId is null --查询指定时间段内的所有订单信息 22 begin 23 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.CommodityId 26 inner join CommoditySort as S on C.SortId=S.SortId 27 where O.OrderTime between @startDate and @endDate 28 end 29 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.CommodityId 35 inner join CommoditySort as S on C.SortId=S.SortId 36 where O.UserId=@userId and O.OrderTime between @startDate and @endDate 37 end 38 go 39 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=default 52 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,@uid 60 --除了显示调用外,要求参数位置必须与存储过程定义时顺序相同
原文:https://www.cnblogs.com/zhangxudong-cnblogs/p/10940966.html