首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程里多条件判断如何写?紧急中

2012-12-22 
存储过程里多条件判断怎么写?紧急中我存储过程里想实现多个传入参数的判断,里面有7个传入参数条件.CREATE

存储过程里多条件判断怎么写?紧急中
我存储过程里想实现多个传入参数的判断,里面有7个传入参数条件.
CREATE PROCEDURE sp_tbWasteSource_Search
(
    @sd   datetime,           //开始日期
    @ed   datetime,           //结束日期
    @con1 varchar(50),        
    @con2 varchar(30),        
    @con3 varchar(5),        
    @con4  varchar(10),       
    @con5 varchar(4)         
)
AS
declare @sql varchar(1000)
begin
  set @sql='SELECT * FROM table '
  if  @sd!='' and @ed!=''
    begin
      set @sql=@sql+' where CosID= '+cast(@CosID as varchar)
    end
  if (@CosName!= '' and @CosID!='')
    begin
      set @sql=@sql+'and'+'  CosName=  '+cast (@CosName as varchar )
    end
  else 
    if (@CosName!='' and @CosID ='')
      begin
        set @sql=@sql+'where '+'  CosName=  '+cast (@CosName as varchar )
      end
  if @CosCredit!= '' and (@CosID!='' or @CosName!='')
    begin
      set @sql=@sql+' and  CosCredit=  '+cast (@CosCredit as varchar )
    end
  else 
    if @CosCredit!='' and @CosID=''and @CosName=''
      set @sql=@sql+'where CosCredit= '+cast (@CosCredit as varchar )
  exec (@sql)
end
GO
以这样的形式来判断,我想实现,假如两个日期条件不输入,那么就以后面5个输入条件来判断。就是相当于以某一个输入条件做查询,假如输入条件了,那么就是以日期条件和5个条件里的某一个作为判断?
[最优解释]
发你代码,解决了 !
[其他解释]

CREATE PROCEDURE sp_tbWasteSource_Search
(
  @sd datetime=null, //开始日期
  @ed datetime=null, //结束日期
  @con1 varchar(50),   
  @con2 varchar(30),   
  @con3 varchar(5),   
  @con4 varchar(10),   
  @con5 varchar(4)   
)
as 
begin
   select * from tb 
      where (@sd is null or date>@sd) and (@ed is null or date<@ed)
end

[其他解释]
假如开始日期和结束日期输入了,又输入其中下面5个条件里的一个,该如何判断呢?
或者开始日期和结束日期不输入,只输入了5个条件里的其中一个,两个,三个,等等,该如何在存储过程里怎么写呢?:
[其他解释]
create table #temp
(
卡号 varchar(100),


等级 nvarchar(100),
积分 int,
升级时间 datetime
)
insert #temp
select '000005', '9折', '3001', '2010-3-8' union all
select '000006', '9折', '3022', '2010-5-9' union all
select '000005', '8.5折', '6008', '2010-7-9' union all
select '000005', '8折', '10009', '2011-2-9' union all
select '000006', '8.5折', '6700', '2011-1-1'

--SQL:
select [9折升级时间] = n.[9折], [9折时积分]=m.[9折], [8.5折升级时间]=n.[8.5折], [8.5折时积分]=m.[8.5折],[8折升级时间]=n.[8折],[8折时积分]=m.[8折] from
(
select * from
(select 卡号, 等级, 积分 from #temp) a
pivot
(max(积分) for 等级 in ([9折], [8.5折], [8折])) b
) m
inner join
(
select * from
(select 卡号, 等级, 升级时间 from #temp) a
pivot
(max(升级时间) for 等级 in ([9折], [8.5折], [8折])) b
) n
on m.卡号 = n.卡号
/*
9折升级时间9折时积分8.5折升级时间8.5折时积分8折升级时间8折时积分
2010-03-08 00:00:00.00030012010-07-09 00:00:00.00060082011-02-09 00:00:00.00010009
2010-05-09 00:00:00.00030222011-01-01 00:00:00.0006700NULLNULL
*/
--如果列不固定,用动态SQL自己拼,CSDN上的例子很多
http://topic.csdn.net/u/20110310/12/ed017dee-c0b9-42f6-b02d-afa222466e9f.html


[其他解释]
引用:
假如开始日期和结束日期输入了,又输入其中下面5个条件里的一个,该如何判断呢?
或者开始日期和结束日期不输入,只输入了5个条件里的其中一个,两个,三个,等等,该如何在存储过程里怎么写呢?:


这个貌似是程序完成的事情吧 在存储过程中体现为不传参数?
[其他解释]
上面发错了.
下面仅供参考:
SELECT * FROM table_name
where ((@sd is null and @ed is null) or (sd >= @sd and ed <= @ed)) --sd和ed都是空时,此条件总为true,否则相当于sd >= @sd and ed <= @ed
and (@con1 is null or con1 = @con1) --如果@con1不传值,则此行条件总为true;如果传值,则此行为and con1=@con1
and (@con2 is null or con2 = @con2) --同con1
and (@con3 is null or con3 = @con3) --同con1
and (@con4 is null or con4 = @con4) --同con1
and (@con5 is null or con5 = @con5) --同con1

[其他解释]
我要实现的其实分成两大类,第一大类,就是开始日期和结束日期都空的,那么就查询这5个条件里其中一个,或者2个,或者3个.
第二大类,假如输入了开始日期和结束日期,那么查询的时候总是要有这个开始和结束日期,并且5个条件里其中之一的任意组合.
[其他解释]
to #5楼,这样一个语句就能解决所有的判断吗?
[其他解释]
这些条件不如直接在UI断判断好,然后拼成一个检索字符串传到存储过程。
[其他解释]

SELECT * FROM table
where 1=1
and sd>= case when @sd is not null when @sd else sd end
and ed<= case when @ed is not null when @ed else ed end
and CosID= case when @CosID is not null when @CosID else CosID end
and CosName= case when @CosName is not null when @CosName else CosName end


and .....


[其他解释]
怎么我每次看的问题都不基础
[其他解释]
可以根据你实际情况判断参数是否为空。然后拼SQL语句,exec
[其他解释]
我这个table表里有个日期的字段sDate,两个参数日期只要这样判断:sDate>=@sd and sDate<=@ed 
[其他解释]
对于这7个条件,要实现任意组合的查询?
[其他解释]
引用:
发你代码,解决了 !


贴出来看看啊

热点排行