【问题标题】:SQL Insert multi rows from multi list valuesSQL 从多个列表值中插入多行
【发布时间】:2015-08-08 21:30:35
【问题描述】:

我正在尝试将记录插入到 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 标记中删除了;,并添加了以下代码 在插入查询中的 cfloop 之前。现在,我得到了多个专有名称的长字符串,在Member 列中用分号分隔。

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

【问题讨论】:

  • 首先,你需要学习如何使用&lt;cfqueryparam&gt;,然后你需要学习&lt;cfloop&gt;,然后用它包裹&lt;cfquery&gt;
  • 您尝试在哪里插入多条记录?
  • 我尝试了多种循环组合请发布该代码in your question(而不是作为“答案”)。
  • 抱歉,Leigh,我在上面有代码,但我删除了它,因为我们一次只允许用户处理一个分发列表。我已经让插入查询以这种方式工作,但是它将所有成员 distinctNames 放在 Member 列中的一个长字符串中,而不是为每个成员 DistinguishedName 放置一个新行。明天我会再做一些工作,然后发布我所拥有的。
  • (编辑)@toleolu - 好的,但我的意思是我们需要查看导致问题的实际代码。而不是“描述”代码,只需发布​​它;-) 但是,我看到你现在这样做了。 它将所有成员 distinctNames 放在一个长字符串中 正如您所猜测的(在已删除的答案中),您可能在循环中使用了错误的列表分隔符。请使用 DistListDistinguishedName 值和所需结果的示例更新您的问题。

标签: sql sql-server coldfusion


【解决方案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>

我会把细节留给你。关注亨利关于查询参数的评论。

【讨论】:

    猜你喜欢
    • 2016-06-19
    • 2011-06-14
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多