SQL UPDATE-else-INSERT一个Excel“表”

时间:2015-12-18 23:57:33

标签: sql excel-vba insert-update vba excel

这个问题是根据之前的问题构建的(here - 请阅读它,因为它包含大部分细节和背景细节)。链接到的内容与此处的唯一区别是qry字符串(如下所示)。如果这篇文章需要更多细节,请告诉我。

我的问题:如果有能力我如何更新,否则插入新记录? 我尝试了几种变体,但通过Excel-VBA进行此操作证明了这一点。 ..难。为了简单起见,我会将我的示例保留为两个(两个看起来效率最高的)。

1)通过排查我已经确定由于@@ROWCOUNT导致失败,但我无法弄清楚变量名称(如果它存在于此上下文中)。

qry = "UPDATE <tbl> " & vbNewLine & _
      "SET empName='<name>', empDay=CDate('<date>'), inTime=CDate('<in>'), outTime=CDate('<out>'), " & _
          "vac=CBool('<vac>'), sales=CDbl(<sales>) " & vbNewLine & _
      "WHERE empName='<name>' AND empDay=CDate('<date>') " & vbNewLine & _
      "IF @@ROWCOUNT = 0 " & vbNewLine & _
      "  INSERT INTO <tbl> (empName, empDay, inTime, outTime, vac, sales)" & vbNewLine & _
      "  VALUES (CStr('<name>'), CDate('<date>'), CDate('<in>'), CDate('<out>'), " & _
            "CBool('<vac>'), CDbl(<sales>));" & vbNewLine & _
      "END;"

2)几乎有效,只抱怨错过了“;”在SQL语句的末尾(显然那里)。 parens似乎也匹配。

qry = "INSERT INTO <tbl> (empName, empDay, inTime, outTime, vac, sales)" & vbNewLine & _
      "VALUES (CStr('<name>'), CDate('<date>'), CDate('<in>'), CDate('<out>'), " & _
            "CBool('<vac>'), CDbl(<sales>))" & vbNewLine & _
      "ON DUPLICATE KEY UPDATE (empName='<name>' AND empDay=CDate('<date>'));"

0 个答案:

没有答案