USE [TSMISData]
GO
/****** Object: StoredProcedure [dbo].[ontime] Script Date: 09/28/2012 10:55:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[ontime]
@begintime datetime,
@endtime datetime,
@ontmie_day int
as
declare @ERROR varchar(60)
declare @tbl table(id int identity(1,1) primary key , dayname varchar )
begin
if len(@begintime)=0 or LEN(@endtime)=0
begin
set @ERROR='输入的日期时间不能为空'
end
if ISDATE(@begintime)=0 or ISDATE(@endtime)=0
begin
set @ERROR='您输入的时间格式有误!'
return 1
end
else
begin
while @begintime>@endtime
begin
insert @tbl(dayname)values(@begintime);
set @begintime=@begintime+1;
end
end
select @ontmie_day=COUNT(dayname) from @tbl where dayname not in ('星期六','星期日')
return @ontmie_day
end
意图是算出给出时段排除周末的天数!
解决方案 »
- 大家帮我看看呐,这条语句错在哪啊
- 如何快速执行多条Sql语句(如insert,update)
- 关于字符串函数。
- to_char函数
- |M| 我知道怎么给表的字段添加说明,那给表添加说明的话在哪里添加
- C#和SQL金额数据类型用什么好啊?
- 使用 DBCC SHRINKDATABASE (DataBaseName)压缩数据库?
- SQL中同时取两个的指定字段
- 求一SQL语句,非常急,在线等,谢谢!!!!!!!!!!!
- 求助:怎样将TXT档倒入SQL数据库的表里(原用VF编程, 现改用VB + SQL)?
- 不小心删了个存储与表!没有备份,还有救吗?
- SQL2005导入数据时报错:对于造型说明无效的字符值
@begintime datetime,
@endtime datetime,
@ontmie_day int output
ALTER proc [dbo].[ontime]
@begintime datetime,
@endtime datetime,
@ontmie_day int
as
declare @ERROR varchar(60)
declare @tbl table(id int identity(1,1) primary key , dayname varchar )
begin
if len(@begintime)=0 or LEN(@endtime)=0
begin
set @ERROR='输入的日期时间不能为空'这些地方你都没有返回,set来干嘛?
end
if ISDATE(@begintime)=0 or ISDATE(@endtime)=0
begin
set @ERROR='您输入的时间格式有误!'同上
return 1
end
else
begin
while @begintime>@endtime
begin
insert @tbl(dayname)values(@begintime);
set @begintime=@begintime+1;
end
end
select @ontmie_day=COUNT(dayname) from @tbl where dayname not in ('星期六','星期日') 红字哪里也可以去掉
return @ontmie_day 这个可以不用
end
我感觉你这个用一个表值函数来实现就可以了
改成这样试试:ALTER proc [dbo].[ontime]
@begintime datetime,
@endtime datetime,
@ontmie_day INT OUTPUT -- -1表示您输入的时间格式有误,-2表示输入的日期时间不能为空,大于0表示有记录
as
begin
declare @tbl table(id int identity(1,1) primary key , [dayname] varchar ) if len(@begintime)=0 or LEN(@endtime)=0
begin
set @ontmie_day = -2
RETURN
END
if ISDATE(@begintime)=0 or ISDATE(@endtime)=0
begin
set @ontmie_day = -1
RETURN
end
else
begin
while @begintime>@endtime
begin
insert @tbl(dayname) values(@begintime);
set @begintime=@begintime+1;
end
END
select @ontmie_day=COUNT(dayname) from @tbl where [dayname] not in ('星期六','星期日')
end全部都可以使用一个输出参数:@ontmie_day INT OUTPUT,然后前台根据返回值来输出不同的信息给使用者,比如我这里就是-1表示您输入的时间格式有误,-2表示输入的日期时间不能为空,大于0表示有记录。