日期:2014-05-17  浏览次数:20552 次

创建的存储过程查不到数据
本帖最后由 powerbulider9 于 2013-06-13 21:03:48 编辑
新建表CREATE TABLE [dbo].[t_mz_record](
[name] [varchar](20) NULL,
[sex] [int] NULL,
[age] [int] NULL,
[recdate] [datetime] NULL
),插入几条相应的数据
insert into t_mz_record values('张三',1,24,'2013-01-18')
insert into t_mz_record values('李四',1,27,'2013-01-13')
insert into t_mz_record values('王吟',2,22,'2013-02-13')
insert into t_mz_record values('神女',2,35,'2013-03-13')
insert into t_mz_record values('专家',1,45,'2013-03-12')
,然后写了个存储过程,并且创建成功了
create procedure dbo.lixiu 
@sdate datetime,
@edate datetime
as
declare @start datetime
declare @stop datetime
select name 姓名,(case when sex=1 then '男' else '女' end)sex ,age 年龄,recdate 记录日期 from t_mz_record
where recdate between @start and @stop and @start=@sdate and @stop=@edate
order by recdate;
调用存储过程:exec lixiu '2013-01-11','2013-02-19'
但是查出来是空数据,求教!
存储

------解决方案--------------------
declare @start datetime
declare @stop datetime
select name 姓名,(case when sex=1 then '男' else '女' end)sex ,age 年龄,recdate 记录日期 from t_mz_record
where recdate between @start and @stop and @start=@sdate and @stop=@edate

你的@start ,@stop 没有赋值,所以出来控数据。

------解决方案--------------------
这段条件多余:and @start=@sdate and @stop=@edate
把它去掉就可以工作正常,按照一段日期赛选记录了。
------解决方案--------------------
引用:
这段条件多余:and @start=@sdate and @stop=@edate
把它去掉就可以工作正常,按照一段日期赛选记录了。

参考楼上的答案
------解决方案--------------------
create procedure dbo.lixiu 
@sdate datetime,
@edate datetime这里定义的是外面传进来的参数;
as
declare @start datetime
declare @stop datetime这里定义的是存储过程内部使用的参数,和外面传进来的不一样。
------解决方案--------------------
where recdate between @start and @stop and @start=@sdate and @stop=@edate

这句直接改成

where recdate between @sdate and @edate
------解决方案--------------------
你的where条件可以看作3个条件的联合
(recdate between @start and @stop )and (@start=@sdate) and( @stop=@edate)

@start=@sdate 是判断,不是赋值,
@stop=@edate 也是判断,不是赋值。
------解决方案--------------------
这样试试
alter procedure dbo.lixiu 
@sdate datetime,