SQL UPDATE基于条件

时间:2012-09-07 14:55:11

标签: updates sql

我们需要使用用户ID(NBK)更新表。具有NBK的表也具有用户状态(0-1),并且一次只有一个用户具有1。挑战是#1捕获活动用户#2用用户NBK更新另一个表。我希望下面的代码只有一个我找不到的简单的syntex错误?

Dim nb As String
Dim NBK As String

nb = [Employees]![NBK] & "' WHERE "
nb = nb & " " & [Employees]![Status] = '1'
NBK = " Update tbl_DateTracking SET NBK = "
NBK = NBK & "'" & nb & "' WHERE "
NBK = NBK & "CaseId = '" & CaseId & "' AND OCC_Scenario = '" & OCC_Scenario & "' ;"

DoCmd.RunSQL nb
DoCmd.RunSQL NBK

1 个答案:

答案 0 :(得分:0)

这里有几点需要注意:

  1. 您应该使用参数化查询而不是字符串连接。这可以防止/包含SQL注入以及有关格式错误输入的其他问题。
  2. 理想情况下,您应该规范化数据库,以便“活动用户”不是用户表上的字段。当两个用户在数据库中设置为“活动”时会发生什么?
  3. 但是,使用此给定的架构,您将需要使用子选择查询。例如:

    UPDATE tbl_DateTracking SET NBK=(SELECT NBK FROM Employees WHERE Status=1 LIMIT 1) WHERE CaseID=? AND OOC_Scenario=?然后传入CaseIdOOC_Scenario作为参数。

    注意,我不熟悉VB或它与SQL的交互方式;以上只是一个示例,您必须将其应用于您的应用程序并对其进行更改以使其正常工作。您构建和运行嵌套查询的方式看起来也不会起作用,因为您的第一个查询不包含命令(您可能需要SELECT,我。 VB是否使用[]![]语法自动执行此操作?),当您将其嵌套在第二个查询中时,它不会被()包围。如果您将其作为子查询包含在第二个查询中,则单独运行第一个查询也无效。