当DATETIME的变量为空时插入null

时间:2018-01-25 10:38:32

标签: sql-server datetime

我有一个sp从我的表单更新我的表。 当我尝试sp正在运行以更新并将datetime字段留空时,它将默认日期时间设置为" 1900-01-01 00:00:00.000" 如何将其设置为null?

我已经检查了我的表单发送的值,填充日期为空。

我有sp的例子:

ALTER PROCEDURE [dbo].[DBK_spDataUpdate]
    @FirstName    AS NVARCHAR(250)= NULL
    @FillDate     AS DATETIME = NULL
    @DataID       AS BIGINT
SET NOCOUNT ON;
UPDATE      dbo.DBK_tbData
SET         FirstName            = @FirstName,
            FillDate             = @FillDate
WHERE       DataID               = @DataID

1 个答案:

答案 0 :(得分:1)

在这里使用一个小水晶球,但我相信OP会将空字符串('')传递给datetime参数,而不是 NULL 。这是两个非常不同的价值观;如果''将导致日期时间01900-01-01')。

如果这个猜测是正确的,那么你可以使用NULLIF

ALTER PROCEDURE [dbo].[DBK_spDataUpdate] @FirstName    AS NVARCHAR(250)= NULL,
                                         @FillDate     AS DATETIME = NULL,
                                         @DataID       AS BIGINT AS
    SET NOCOUNT ON;
    UPDATE      dbo.DBK_tbData
    SET         FirstName            = @FirstName,
                FillDate             = NULLIF(@FillDate, '19000101')
    WHERE       DataID               = @DataID;

否则,不要传递空字符串,而是传递 NULL