在vba访问中将空日期时间值传递给sql server存储过程

问题描述 投票:0回答:1

我使用 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)
sql vba ms-access ms-access-2016
1个回答
0
投票

我不太确定 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
© www.soinside.com 2019 - 2024. All rights reserved.