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

Sql server ColdFusion&MSSQL:如何在一次提交中插入具有唯一id的多行,sql-server,coldfusion,Sql Server,Coldfusion,有人能帮我在一次提交中提交多行吗 此调查表格将显示从表格技能派生的一组技能。 教师必须选中复选框中的学生技能,然后单击提交 学生可以有多种技能。 如果他有3项技能,那么一旦老师点击提交按钮,发送到数据库的数据将分为3行。表学生技能 <cfoutput query="skill"> <tr> <td>#skill.skillname#</td> <td align="center">:</td> <

有人能帮我在一次提交中提交多行吗

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

学生可以有多种技能。 如果他有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>
表学生技能

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

假设您在SQL server 2008上,您应该能够使用以下语法:

INSERT INTO StudentSkill (StudentID, SkillID)
VALUES (100, 1), (100, 2), (100, 3)
该方法是从中收集的,其中还包含两种替代方法

您只需要迭代FORM.skillid中的ID列表,假设您的表单就是这样构建上述SQL的。此外,在构建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>

插入多条记录的另一种简单方法是插入。。选择在banyr发布的链接中也提到了这一点。因为技能id存储在另一个表中,所以可以使用in子句来选择它们。然后通过一个简单的查询将这些值直接插入到其他表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">
       )

顺便说一句,如果不是打字错误,请不要忘记查询列名ie skillid周围的符号

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

看起来很棒!这比我以前做的容易多了。你说过语法可以与sql server一起使用,我相信你的话。它可能无法与其他db软件一起工作。OP,@vamps可能会注意到这一点。MySQL也支持相同的语法@barnyr-我编辑了您的代码,以确保多个值集由commas@DanBracuk-我的编辑必须在barnyr的答案中可见之前被barnyr接受。@azawaza-由于某种原因,在我有机会审查之前,您的编辑被其他人拒绝了。不过,我要感谢你在我发布的代码中发现了缺失的逗号。我将简略地修改这个示例这是一个简单的问题,已经很好地演示了。齿轮工作!
    <input type="checkbox" name="skillid" value="skillid" checked="checked">
  <input type="checkbox" name="skillid" value="#skillid#" checked="checked">