SQL INSERT INTO VALUE 语句使用带有变量的 SELECT 语句

SQL INSERT INTO VALUE statement using a SELECT statement with a variable

我有 2 个表:

创建新客户时,我使用关闭事件时的表单将每个任务从 Tbl_Task 写入 Tbl_Proc。我正在使用表格中的客户名称来完成 Tbl_Proc.

中的记录

我的想法是使用一个整数来增加 TaskNum 并将该任务编号 TaskName 分配给 Tbl_Proc[ProcTaskName]。然后循环遍历所有任务编号。如您所见,我坚持使用整数变量。

这是我的。我可以成功写入公司名称,但无法获取 ProcTaskName:

Private Sub Form_Close()
    On Error GoTo Err_Form_Close

    Dim strCompany As String
    Dim sqls As String
    Dim x As Integer

    strCompany = Me![CoName]
    'MsgBox strCompany
    x = 1

    sqls = "INSERT INTO Tbl_Proc(ProcCo, ProcTaskName)" & _
                    "VALUES ('" & strCompany & "', SELECT TaskName FROM Tbl_Task WHERE TaskNum=""" & x & """)"
    DoCmd.RunSQL sqls
'This works - "VALUES ('" & strCompany & "', 'cat')"

Exit_Form_Close:
    Exit Sub

Err_Form_Close:
    MsgBox Err.Description
    Resume Exit_Form_Close

End Sub

如果我正确理解你的问题,你希望你的 sql 看起来像这样:

INSERT INTO Tbl_Proc(ProcCo, ProcTaskName)
    SELECT <yourCompanyVariable>, TaskName 
    FROM Tbl_Task 
    WHERE TaskNum=<whateverItIsYouHaveHere>

select 将 return 所有具有您给定编号的任务,每个任务都标有您的公司变量。所有这些都将被插入到您的 table 中。

如果您可以轻松地在 tbl_task 中定义您想要的所有内容,例如 where defaultTasks = 1,您可以在一个查询中插入您需要的所有任务,而无需循环。

感谢提供非常想要的裤子的人...:) 我将另一列添加到 Tbl_Tasks [TaskDefault] 并将所有值设置为 1。 以下代码适用于 Microsoft Access 2013 VBA 模块。

sqls = "INSERT INTO Tbl_Proc(ProcCo, ProcTaskName)" & _
        "SELECT '" & strCompany & "', TaskName " & _
        "FROM Tbl_Task WHERE TaskDefault=1"
DoCmd.RunSQL sqls