SQL从多个列表值插入多行

时间:2015-05-27 01:19:36

标签: sql sql-server coldfusion

我正在尝试将记录插入到SQL 2008 R2表中,其中插入的值会有所不同。

<cftry>    
    <cfquery name="AddListMembers" datasource="HHSCIntra">    
       INSERT INTO tbl_MailMembers (DateEntered, EnteredBy, Method,Member,List)    
       VALUES (
          CURRENT_TIMESTAMP
          , '#session.UserID#'
          , 'A'
          , '#session.RecipientDistinguishedName#'
          , '#session.DistListDistinguishedName#'
       )
    </cfquery>
    <cfcatch type="Database">
       <cfoutput>#cfcatch.message#</cfoutput>
    </cfcatch>    
</cftry>

变化的值为session.RecipientDistinguishedNamesession.DistListDistinguishedName,所有其他值都是常量。基本上有一次我可能

  • 将3个成员添加到1个通讯组列表中,或
  • 将1个成员添加到4个通讯组列表中,或
  • 将3个成员添加到5个通讯组列表

我尝试了很多循环组合,但我得到的只是写入表中的一条记录:列表中的第一个成员和第一个分发列表。

更新:

好的事情发生了一些变化,我们只允许用户一次在一个分发列表上工作。所以低于我现在的水平。 (请注意我遗漏了cfqueryparam和其他一些细节,以便在帖子中更适合。)

<cfloop list="#session.RecipientDistinguishedName#" index="i" delimiters="">
   <cfquery name="AddListMembers" datasource="HHSCIntra">
      INSERT INTO tbl_MailMembers (DateEntered, EnteredBy, Method, Member, List)
      VALUES (
         CURRENT_TIMESTAMP
         , '#session.UserID#'
         , 'A'
         , '#i#'
         , '#session.DistListDistinguishedName#'
      )
   </cfquery>
</cfloop>

在我从AD中提取员工专有名称的代码中,我添加了这个:

<cfinput type="hidden" name="frmEmpDistinguishedName"
        value="#EmployeeAdd.distinguishedName#;">

将分号添加到专有名称的末尾,以便在查询该表时可以将其用作分隔符。因此,在Member列中结束的是一个长字符串,其中包含用分号分隔的所有可分辨名称。

我注意到的一件事是列中的第一个专有名称以CN=开头,但所有后续专有名称都以,CN=开头。我正在寻找那张桌子,看看这是否会成为一个问题。关于更好的方法的任何建议将不胜感激。

最终更新:::

我从;标记中删除了cfinput,并添加了以下代码 在insert查询中的cfloop之前。现在我开始使用多个专有名称的长串,在Member列中用分号分隔。

<cfset session.RecipientDistinguishedName="#Replace(session.RecipientDistinguishedName,'DC=org,','DC=org;','ALL')#">

1 个答案:

答案 0 :(得分:1)

使用sql server,您可以使用此构造。

<cfquery>
insert into yourTable
(field1, field2, etc)
select null, null, etc
where 1 = 2
<cfloop>
union 
select value1, value2, etc
</cfloop>
</cfquery>

我会把细节留给你。请注意Henry对查询参数的评论。