我想从表中选择300行并将它们再次插入到同一个表中

时间:2013-03-26 08:58:23

标签: ms-access vb6

我有一个表[Emp],其中包含以下列:

的EmpID,
EmpName,
EmpLastName,
EmpSalary,
月,
今年,
ModDate

我想使用上个月的大约300条记录在相同的表中创建300条新记录,除了我想在插入语句中修改的月份属性外,它们具有相同的值。

我想为此目的使用MS Access + vb6。

如果你能帮助我解决这个问题,我将非常感激。

我尝试执行的查询如下:

INSERT INTO Emp ( EmpID, EmpName, EmpLastName, EmpSalary, [Month], [Year], ModDate)
SELECT Emp.EmpID, Emp.EmpName, Emp.EmpLastName, Emp.EmpSalary, 4 AS Expr1, Emp.[Year], Now() AS Expr2
FROM Emp
WHERE (((Emp.[Year])=2013) AND ((Emp.[Month])=3))

1 个答案:

答案 0 :(得分:0)

您想要实现的目标的本质是如下所示的查询,它选择2013年3月的记录并将它们插入到2013年4月的同一个表中:

INSERT INTO Emp ( EmpID, EmpName, EmpLastName, EmpSalary, [Month], [Year], ModDate )
SELECT Emp.EmpID, Emp.EmpName, Emp.EmpLastName, Emp.EmpSalary, 4 AS Expr1, Emp.[Year], Now() AS Expr2
FROM Emp
WHERE (((Emp.[Year])=2013) AND ((Emp.[Month])=3))

[edit]

上述查询假设[Month]是一个数字列。如果[Month]是Text列,则相应的查询将是

INSERT INTO Emp ( EmpID, EmpName, EmpLastName, EmpSalary, [Month], [Year], ModDate )
SELECT Emp.EmpID, Emp.EmpName, Emp.EmpLastName, Emp.EmpSalary, 'April' AS Expr1, Emp.[Year], Now() AS Expr2
FROM Emp
WHERE (((Emp.[Year])=2013) AND ((Emp.[Month])='March'))

但请注意,存储月份数字 非常首选以存储月份名称。将该列保留为文本可能会导致不必要的复杂情况。

<强> [/编辑]

您的VB6代码可以构造这样的字符串,将硬编码值替换为VB函数的结果,如Year()Month()等(并将年份增加到12月 - > 1月)。构建SQL字符串后,可以使用已建立的数据库连接执行它(很可能使用.Execute之类的方法)。