我用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 )