我使用 Access 与
Sql Server
,在客户数据表中(客户出生日期是可选字段),如果用户在按存储过程日期创建记录时将其保留为空,记录为(30/12/1899)作为附加图像
我找到了这个解决方案,但我真的不知道我到底需要在代码或数据库中更改哪里
我已经尝试在
access.vba
中使用以下代码来传递空日期
cmd.Parameters.Append cmd.CreateParameter("@p_custi_birth_date", adDBTimeStamp, adParamInput, , Format(CDate(Nz(!custi_birth_date, Empty)), "YYYY-MM-DD"))
这是存储过程中如果参数为空则记录null的Sql语句
CAST(NULLIF(@p_custi_birth_date,'') AS DATE)
我不太确定 vba 方面 - 我假设您遵循您发布的链接中的建议,即确保您将日期作为字符串传递,并且该字符串是有效日期sql server 可以理解的字符串 - 在我看来这意味着使用
yyyy-mm-dd
或 yyyymmdd
,not 使用 mm/dd/yyyy
或 dd/mm/yyyy
,尽管如果必须的话请随意尝试后者。
但是在存储过程中,我认为您不能将空字符串转换为日期。因此,这可能更适合您的存储过程(假设传入了有效的日期字符串):
case
when isnull(@p_custi_birth_date, '') = '' then null
else cast(@p_custi_birth_date as date)
end