ColdFusion和MSSQL:如何在一个提交中插入具有一个唯一ID的多行

vam*_*mps 4 sql-server coldfusion

任何人都可以帮助我如何在一次提交中提交多行?

此调查表格将显示一组源自表技能的技能.教师必须在复选框中检查学生技能,然后单击"提交".

学生可以拥有多种技能.如果他有3种技能,那么一旦教师点击提交按钮,发送到数据库的数据将分为3行.(表studentkill)

<cfoutput query="skill">
<tr>
    <td>#skill.skillname#</td>
    <td align="center">:</td>
    <td><input type="checkbox" name="skillid" value="skillid" checked="checked"></td>
</tr>
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

桌上技巧

+---------+------------+
| skillid | skillname  |

+---------+------------+

| 1       | draw       |

+---------+------------+

| 2       | read       |

+---------+------------+

| 3       | dance      |

+---------+------------+
Run Code Online (Sandbox Code Playgroud)

表studentkill

+----------+----------|

|studentid | skillid  |

+----------+----------+
| 001      | 1        |
| 001      | 2        |
| 002      | 1        |
| 002      | 2        |
| 002      | 3        |
+----------+----------+
Run Code Online (Sandbox Code Playgroud)

bar*_*nyr 5

假设您使用的是SQL Server 2008,则应该能够使用以下语法:

INSERT INTO StudentSkill (StudentID, SkillID)
VALUES (100, 1), (100, 2), (100, 3)
Run Code Online (Sandbox Code Playgroud)

这个方法从这里收集,其中还包含一些替代方法.

您只需要迭代FORM.skillid中的ID列表(假设您的表单是如何工作的)来构建上面的SQL.此外,请确保<CFQueryParam>在构建SQL时使用值.像下面的代码应该做的事情:

<cfif ListLen(FORM.skillid)>
  <cfquery>
   INSERT INTO StudentSkill (StudentID, SkillID)
    VALUES
   <cfloop list="#form.skillid#" index="skill">
     (<cfqueryparam value="#form.studentID#" CFSQLType="CF_SQL_INTEGER">, 
       <cfqueryparam value="#skill#" CFSQLType="CF_SQL_INTEGER">)
   </cfloop>
  </cfquery>
</cfif>
Run Code Online (Sandbox Code Playgroud)