当前位置: 代码迷 >> Sql Server >> 为啥在Procedure中if判断不起做用的?第一次用这个,还望各位仁兄赐教
  详细解决方案

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

热度:98   发布时间:2016-04-27 12:01:14.0
为何在Procedure中if判断不起做用的?第一次用这个,还望各位仁兄赐教
我用sql server2005执行存储过程,[email protected],本应if的关系,@time不会是null值,[email protected]
小弟不足,甚是费解,所以望各位仁兄赐教赐教
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. [email protected] = null, 而要用 @Dt is null,其他都正确。
2. [email protected],如果允许为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    )
  相关解决方案