使用where子句插入语句

时间:2009-07-13 14:15:28

标签: sql ms-access access-vba

  

可能重复:
  Query Syntax error

我想使用以下命令

插入值
DoCmd.RunSQL = "insert into tblContract(
 Empid,
 Start1,
 Finish1,
 Store1,
 Start2,
 Finish2,
 Store2)
values ('" & Me.txtEmpNo.Value & "','" 
  & Me.txtContSunStart1.Value & "', '"
  & Me.txtContSunFinish1.Value & "','" 
  & Me.txtContSunStore1.Value & "','" 
  & Me.txtContSunStart2.Value & "', '" 
  & Me.txtContSunFinish2.Value & "','" 
  & Me.txtContSunStore2.Value & "')"

但是插入它时应插入同一行中列(testid)的值为另一个表的max(testid)的行中。

此查询无效:

SQL =“        INSERT INTO tblContract(Empid,testid,Start1,Finish1,Store1,Start2,Finish2,Store2)        选择“& Me.txtEmpNo.Value&”',MAX(testid),'&        Me.txtContSunStart1.Value& “','”& Me.txtContSunFinish1.Value& “','”&        Me.txtContSunStore1.Value& “','”& Me.txtContSunStart2.Value& “','”&        Me.txtContSunFinish2.Value& “','”& Me.txtContSunStore2.Value& “'”&        “FROM tbltesting'”

我正在寻找替代方案。在ms访问中,它给出了编译错误

3 个答案:

答案 0 :(得分:3)

您可以使用INSERT SELECT而不是INSERT VALUES。比如。

INSERT INTO MyTable (ColumnA, ColumnB, ColumnC) SELECT 'A', 'B', MAX(ColumnC) FROM MyOtherTable

另一方面,你不应该像你一样构建你的SQL。这很容易出现SQL注入。有人可以很容易地在你的一个文本框中输入“; DROP TABLE tblContract”!

答案 1 :(得分:1)

首先,您需要从另一个表中获取值,然后使用它来插入此表,您还可以使用触发器来执行此操作。请注意,如果2个用户同时执行相同的查询,则可以使用相同的值两次...在这种情况下,您需要锁定另一个表... max()是有问题的

为什么不使用identity然后在插入另一个表后使用scope_identity()函数来抓取?

你也明白你所做的是等待发生的SQL注入攻击

答案 2 :(得分:0)

如果我正确地阅读了你的问题

INSERT INTO tblContract(col1..., testId) values
    ('value1',..., (SELECT MAX(testID) FROM tblOther));

警告 这可能会导致并发问题