我的SQL语句出错(UPSERT)

时间:2013-06-05 20:06:01

标签: sql ms-access insert-update upsert

我正在尝试UPSERT(因为它似乎被称为),我收到了错误:Microsoft JET Database Engine error '80040e14' Syntax error (missing operator) in query expression ...

UPDATE myTable
SET Field1='10', Field2='11'
WHERE Date = #06/05/2013#
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO myTable
(Field1, Field2)
VALUES (10, 11)
END

1 个答案:

答案 0 :(得分:3)

您的代码使用的是Access SQL无法理解的T-SQL(SQL Server)语法。 VBA等价物将是:

Dim cdb As DAO.Database
Set cdb = CurrentDb
cdb.Execute "UPDATE myTable SET Field1='10', Field2='11' WHERE [Date] = #2013-06-05#", dbFailOnError
If cdb.RecordsAffected = 0 Then
    cdb.Execute "INSERT INTO myTable (Field1, Field2) VALUES ('10', '11')", dbFailOnError
End If
Set cdb = Nothing

注意:

  1. Date是Access中的保留字,因此您应将字段名称指定为[Date]

  2. 请注意,代码使用明确的日期格式yyyy-mm-dd。只要您在哈希标记(#)中包含日期文字,就应该使用该格式。

  3. 还要注意它修复了代码中的类型不匹配:UPDATE语句尝试将字段更新为文本,而INSERT语句尝试将它们作为数字插入。

  4. 编辑重新评论

    上述的ADO等价物

    conntemp.Execute "UPDATE myTable SET Field1='10', Field2='11' WHERE [Date] = #2013-06-05#", RecordsAffected
    If RecordsAffected = 0 Then
        conntemp.Execute "INSERT INTO myTable (Field1, Field2) VALUES ('10', '11')"
    End If