VBA空字符串,用于插入SQL Server

kno*_*t22 5 sql-server ms-access vba

下面是这种情况:有一个带有Microsoft Access前端的SQL Server数据库.SQL Server数据库中有一个表,其中一个名为PackID的列定义为VARCHAR(6)NOT NULL(它必须为NOT NULL,因为它是此表的复合主键的一部分).空字符串在PackID列中是合法的.事实上,它们经常发生.当用户在此表的UI中输入数据,并通过PackID字段选项卡时,会显示一条错误消息:"无法将值NULL插入列'PackID';列不允许空值.INSERT失败."

已经尝试过的东西不起作用:

  1. 在SQL Server数据库中的此列上添加一个默认约束,其值为'' - 显然只有在INSERT语句中省略该列时才使用默认约束
  2. 将Access中的PackID字段的默认值设置为"" - 它的行为就好像""是NULL
  3. 用户在UI中离开行时调用以下VBA代码(Lost Focus事件)

    If IsNull(PackID.Value) Then
       PackID.Value = ""
    End If
    
    Run Code Online (Sandbox Code Playgroud)

有没有人知道如何在Access中强制一个空字符串,所以它被解释为SQL Server的空字符串而不是NULL?

kno*_*t22 1

在 Access 中的 PackID 属性文本框中设置默认值

=" "
Run Code Online (Sandbox Code Playgroud)

工作了。双引号之间的空格非常重要。留出空格会导致插入失败。在 SQL Server 中,LEN(PackID) 返回 0。例如:

SELECT LEN(''), LEN(' ');
Run Code Online (Sandbox Code Playgroud)

两者都返回 0。看起来 SQL Server 将这两者都视为空字符串。