请帮我纠正以下问题:
SQL = "insert into tblContract (Empid, Start1, Finish1, Store1, " & _
"Start2, Finish2, Store2 ) " & _
"values ('" & Me.txtEmpNo.Value & _
"',select max(testid) FROM tbltesting,'" & _
Me.txtContSunStart1.Value & "', '" & _
Me.txtContSunFinish1.Value & "','" & _
Me.txtContSunStore1.Value & "','" & _
Me.txtContSunStart2.Value & "', '" & _
Me.txtContSunFinish2.Value & "','" & _
Me.txtContSunStore2.Value & "')"
问题出在这里:
select max(testid) FROM tbltesting
还有其他选择吗?
答案 0 :(得分:2)
子查询应括在括号中:(select max(testid) FROM tbltesting)
请注意,您的SQL引擎可能不支持INSERT
语句中的子查询,因此您应该使用INSERT...SELECT
查询进行插入。
答案 1 :(得分:1)
只需删除VALUES
:
SQL = "
INSERT INTO tblContract (Empid, Start1, Finish1, Store1, Start2, Finish2, Store2)
SELECT " & 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'"
由于您有7
个目标字段和8
SELECT
列表表达式,因此只有在INSERT
子句中提供您想要的额外字段时才会编译MAX(testid)
去。{/ p>
答案 2 :(得分:1)
如果有什么工作要做,你必须将子查询嵌入一个额外的括号层中:
INSERT INTO SomeTable(Col1, Col2, Col3)
VALUES(val1, (SELECT MAX(testid) FROM tbltesting), val3);
请注意,您很容易受到SQL Injection攻击。
在具有“元素表”的数据库中使用IBM Informix Dynamic Server 11.50,以下工作:
create temp table t(i integer, j integer, k integer);
insert into t values(1, (select max(atomic_number) from elements), 2);
select * from t;
1 118 2
鉴于元素表中的当前数据,这是正确的。
答案 3 :(得分:1)
您需要将VALUES
子句重新编写为SELECT
查询。
您的INSERT
子句中有七列,VALUES
子句中有八列。从列名称我猜你的子查询
select max(testid) FROM tbltesting
缺少目的地。猜它可能被称为starting_testid
;还猜测数据类型(Access数据库引擎ANSI-92查询模式语法):
CREATE PROCEDURE AddContract
(
:Empid INTEGER,
:Start1 DATETIME,
:Finish1 DATETIME,
:Store1 VARCHAR(20),
:Start2 DATETIME,
:Finish2 DATETIME,
:Store2 VARCHAR(20)
)
AS
insert into tblContract
(
Empid, starting_testid,
Start1, Finish1, Store1,
Start2, Finish2, Store2
)
SELECT :Empid, max(testid),
:Start1, :Finish1, :Store1,
:Start2, :Finish2, :Store2
FROM tbltesting;