问大家个存储过程
CREATE PROCEDURE B_CardTypeAll
@CardTypeName varchar(50)=null,
@CardDayNum smalldatetime  =null,
@LastUpDateTime smalldatetime =nullselect CardTypeID from B_CardType where 
(@CardTypeName is null or CardTypeName like '%' + @CardTypeName + '%') and
(@CardDayNum is null or CardDayNum <= DATEADD(day, 1, @CardDayNum) )  and
(@LastUpDateTime is null or LastUpDateTime <= DATEADD(day, 1, @LastUpDateTime) )  如果前2个参数为空,输入第3个参数,可以查到信息。但是,只传入第2个参数,就找不到数据?数据库中肯定有对应的数据,是不是写的有问题啊,请大家看看,谢谢!

解决方案 »

  1.   

    CardDayNum <= DATEADD(day, 1, @CardDayNum) 应该是你字段用错了吧[CardDayNum],
    最简单的方法把@CardDayNum实际的值拿出来:
    select CardTypeID from B_CardType where CardDayNum <= DATEADD(day, 1, '2007-05-31')
    放到查询分析器中去执行以下,看有没有数据
      

  2.   

    DATEADD(day, 1, @p)和'%' + @p + '%',如果@p为null,则计算结果也是null
    在ansi_null默认值的情况下,你用字段值和null比较,结果为unknown,因为sql不是二义性,而是三义。true,false,unknown