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

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

语法

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 --除了显示调用外,要求参数位置必须与存储过程定义时顺序相同

 

posted @ 2019-05-28 22:59  我是神奇的小白  阅读(1924)  评论(0编辑  收藏  举报