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

为啥在Procedure中if判断不起做用的?第一次用这个,还望各位仁兄赐教

2012-08-11 
为何在Procedure中if判断不起做用的?第一次用这个,还望各位仁兄赐教我用sql server2005执行存储过程,并对@

为何在Procedure中if判断不起做用的?第一次用这个,还望各位仁兄赐教
我用sql server2005执行存储过程,并对@Dt发null值,本应if的关系,@time不会是null值,结果@time还是空值
小弟不足,甚是费解,所以望各位仁兄赐教赐教

SQL code
CREATE Procedure [dbo].[InsertBFData](    @Dt datetime,     @Path nvarchar(256))as    Declare @time Datetime    if     @Dt = null    begin        set @time = getdate()        end        else    begin        set @time= @dt    end    insert into t_bf (bf_dt,bf_path) values (@time ,@Path)


[解决办法]
SQL code
CREATE Procedure [dbo].[InsertBFData](    @Dt datetime,     @Path nvarchar(256))as    Declare @time Datetime    if  @Dt is null    begin        set @time = getdate()           insert into t_bf (bf_dt,bf_path) values (@time ,@Path)     end        else    begin        set @time= @dt        insert into t_bf (bf_dt,bf_path) values (@time ,@Path)    end    go--try
[解决办法]
SQL code
CREATE Procedure [dbo].[InsertBFData](    @Dt datetime,     @Path nvarchar(256))as    Declare @time Datetime    if  @Dt is null    begin        set @time = getdate()           insert into t_bf (bf_dt,bf_path) values (@time ,@Path)     end        else    begin        set @time= @dt        insert into t_bf (bf_dt,bf_path) values (@time ,@Path)    end    go
[解决办法]
3个地方要注意:
1. 判断的时候不能用@Dt = null, 而要用 @Dt is null,其他都正确。
2. 你给入的变量@Dt的default没有定义,如果允许为null,可以定义成:@Dt datetime = null,这样可以变量给入的时候省去,减少信息的传输。
3. 关于优化,你的if then else 可以优化成:
set @time = ISNULL(@Dt, getdate())

最后存储过程精简为:
SQL code
CREATE Procedure [dbo].[InsertBFData](    @Dt datetime = null,     @Path nvarchar(256))as    insert into t_bf     (        bf_dt        , bf_path    )    values     (        ISNULL(@Dt, getdate())        , @Path    ) 

热点排行