如果插入值为Null的变量,则INSERT INTO失败

时间:2013-09-24 18:42:23

标签: ms-access ms-access-2007

如果我插入的变量的值为Null,则SQL INSERT INTO将失败。

变量costLab是Variant数据类型。非Null值将为Decimal。

db.Execute ("INSERT INTO budget 
(wbsid, category, capture_date, budget_date, budget_type, month_value) " & _
"VALUES ('" & wbsid & "', 'Labor', #" & importDate & "#, 
#" & monthDate & "#, 'Forecast', " & costLab & ");")

如果设置costLab的代码返回Null,我想插入Null。但是如果返回一个值,我想插入该值。显然我可以编写一个If语句来检查null然后直接插入“Null”,但我想知道是否有一种方法没有If语句通过变量插入Null。

2 个答案:

答案 0 :(得分:6)

您可以在构建Nz()语句时使用INSERT。它与IIf()方法类似,但稍微简洁一些。

Dim strInsert As String
strInsert = "INSERT INTO budget (wbsid, category, capture_date, budget_date, budget_type, month_value) " & _
        "VALUES ('" & wbsid & "', 'Labor', #" & importDate & "#, #" & monthDate & "#, 'Forecast', " & Nz(costLab, 'Null') & ");"
Debug.Print strInsert ' <- examine the finshed statement in Immediate window
db.Execute strInsert, dbFailOnError

Debug.Print让您有机会检查您为数据库引擎执行的语句。如果遇到问题,您可以转到立即窗口( Ctrl + g)查看语句文本。您也可以复制该文本并将其粘贴到新查询的SQL视图中进行测试。

答案 1 :(得分:1)

costLab为空时,只需输入“null”。

因此,当您连接SQL字符串而不是变量costLab时,只需插入:

IIf(IsNull(costLab), "null", costlab)

完整的查询:

db.Execute ("INSERT INTO budget (wbsid, category, capture_date, budget_date, budget_type, month_value) " & _
    "VALUES ('" & wbsid & "', 'Labor', #" & importDate & "#, #" & monthDate & "#, 'Forecast', " & IIf(IsNull(costLab), "null", costlab) & ");")

我知道......从技术上讲, If声明(IIf只是If...Then...Else的简短形式),但它是最短的形式我能想到的。