我有一个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
答案 0 :(得分:1)
在这里使用一个小水晶球,但我相信OP会将空字符串(''
)传递给datetime参数,而不是 NULL
。这是两个非常不同的价值观;如果''
将导致日期时间0
(1900-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
。