日期:2014-05-18 浏览次数:20549 次
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)
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
------解决方案--------------------
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())
最后存储过程精简为:
CREATE Procedure [dbo].[InsertBFData]
(
@Dt datetime = null,
@Path nvarchar(256)
)
as
insert into t_bf
(
bf_dt
, bf_path
)
values
(
ISNULL(@Dt, getdate())
, @Path
)