积极答复者
存储过程的外部参数如何传入多个值

问题
答案
-
你好!把一组星期六和星期天的日期作为参数传入存储过程,那么要将这个参数定义为字符类型,可以用逗号隔开。然后自定义一个函数去分割这个字符,返回结果是一个数据库表格。把字段由字符类型转换成日期类型就可以了。
--分割字符串函数 CREATE FUNCTION [dbo].[GetCommaSplitValue](@String varchar(8000), @Delimiter char(1)) returns @temptable TABLE (items varchar(8000)) as begin declare @idx int declare @slice varchar(8000) select @idx = 1 if len(@String)<1 or @String is null return while @idx!= 0 begin set @idx = charindex(@Delimiter,@String) if @idx!=0 set @slice = left(@String,@idx - 1) else set @slice = @String if(len(@slice)>0) insert into @temptable(Items) values(@slice) set @String = right(@String,len(@String) - @idx) if len(@String) = 0 break end return end GO --测试 declare @a varchar(20) set @a='2011-01-01,2011-02-01' select * from [GetCommaSplitValue](@a, ',')
但是参数的长度是有限制的,你传入的日期如果很多的话,这种实现方式不是很理想。你可以判断当前日期是否为星期六或者星期天,如果是,就排除:select case when datename(weekday,GETDATE()) in ('Saturday','Sunday') then 1 else 0 end
Best Regards,
Stephanie Lv
- 已标记为答案 Ai-hua Qiu 2011年4月29日 8:15
全部回复
-
你好!把一组星期六和星期天的日期作为参数传入存储过程,那么要将这个参数定义为字符类型,可以用逗号隔开。然后自定义一个函数去分割这个字符,返回结果是一个数据库表格。把字段由字符类型转换成日期类型就可以了。
--分割字符串函数 CREATE FUNCTION [dbo].[GetCommaSplitValue](@String varchar(8000), @Delimiter char(1)) returns @temptable TABLE (items varchar(8000)) as begin declare @idx int declare @slice varchar(8000) select @idx = 1 if len(@String)<1 or @String is null return while @idx!= 0 begin set @idx = charindex(@Delimiter,@String) if @idx!=0 set @slice = left(@String,@idx - 1) else set @slice = @String if(len(@slice)>0) insert into @temptable(Items) values(@slice) set @String = right(@String,len(@String) - @idx) if len(@String) = 0 break end return end GO --测试 declare @a varchar(20) set @a='2011-01-01,2011-02-01' select * from [GetCommaSplitValue](@a, ',')
但是参数的长度是有限制的,你传入的日期如果很多的话,这种实现方式不是很理想。你可以判断当前日期是否为星期六或者星期天,如果是,就排除:select case when datename(weekday,GETDATE()) in ('Saturday','Sunday') then 1 else 0 end
Best Regards,
Stephanie Lv
- 已标记为答案 Ai-hua Qiu 2011年4月29日 8:15
-
把时间拼成字符串,得到参数后分割一下
/*按照符号分割字符串*/ create function [dbo].[m_split2](@c varchar(2000),@split varchar(2)) returns @t table(col varchar(200)) as begin while(charindex(@split,@c)<>0) begin if(substring(@c,1,charindex(@split,@c)-1)!=' ') begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) end set @c = stuff(@c,1,charindex(@split,@c),'') -- SET @c = substring(@c,charindex(' ',@c)+1,len(@c)) end if(@c!=' ' and @c is not null and @c!='') begin insert @t(col) values (@c) end return end