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



谁能帮我如何在一次提交中提交多行?

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

一个学生可以拥有多项技能。如果他有 3 个技能,那么一旦老师点击提交按钮,发送到数据库的数据将在 3 行中。(表学生杀)

<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>

桌子技能

+---------+------------+
| skillid | skillname  |
+---------+------------+
| 1       | draw       |
+---------+------------+
| 2       | read       |
+---------+------------+
| 3       | dance      |
+---------+------------+

表学生杀戮

+----------+----------|
|studentid | skillid  |
+----------+----------+
| 001      | 1        |
| 001      | 2        |
| 002      | 1        |
| 002      | 2        |
| 002      | 3        |
+----------+----------+

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

INSERT INTO StudentSkill (StudentID, SkillID)
VALUES (100, 1), (100, 2), (100, 3)

这种方法是从这里收集的,其中还包含几种替代方法。

你只需要遍历FORM.skillid中的ID列表(假设这就是你的表单的工作方式)来构建上面的SQL。此外,请确保在构建 SQL 时对值使用<CFQueryParam>。类似于下面的代码应该做的事情:

<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>

插入多条记录的另一种简单方法是INSERT .. SELECT。(在发布的链接中也提到了它)。由于技能 ID 存储在另一个表中,因此可以使用 IN 子句来SELECT它们。然后,通过简单的查询将这些值直接插入到其他表中,studenSkill,无需循环。

INSERT INTO studenSkill ( studenId, skillId )
SELECT <cfqueryparam value="#form.studentId#" cfsqltype="cf_sql_integer">
       , skillId
FROM   skill
WHERE  skillId IN 
       (
       <cfqueryparam value="#form.skillId#" cfsqltype="cf_sql_integer" list="true">
       )



    <input type="checkbox" name="skillid" value="skillid" checked="checked">

顺便说一句,如果这不是错别字,请不要忘记查询列名称周围的#符号,即" skillid"

  <input type="checkbox" name="skillid" value="#skillid#" checked="checked">

最新更新