【问题标题】:How to make batch insert with ColdFusion having more than 1000 records?如何使用具有 1000 多条记录的 ColdFusion 进行批量插入?
【发布时间】:2014-04-13 13:57:48
【问题描述】:

我有一个包含大约 3000 条记录的电子表格。我需要将所有这些数据插入到一个新表中。所以在这种情况下使用批量插入机制是相当不错的。

所以我尝试了一个简单的例子,

 <cfquery datasource="cse">
    insert into Names
    values
    <cfloop from="1" to="3000" index="i">
        ('#i#')
        <cfif i LT 3000>, </cfif>
    </cfloop>
</cfquery>

但由于 SQL Server 2008 一次只允许 1000 个批量插入,我收到错误。

那么如何制作单独的批处理,每个批处理一次包含 999 条记录,并且可以一次执行?

【问题讨论】:

    标签: sql sql-server coldfusion batch-processing


    【解决方案1】:

    您可以使用BULK INSERT 语句来处理超大数据集。

    数据需要采用 CSV 格式,并且您必须为文件位置创建一个变量。

      <cfquery datasource="cse">
        BULK INSERT Names
        FROM '#variables.sCSVLocation#'
      </cfquery>
    

    如果您有理由不使用 BULK INSERT 并希望将其分解为 999 个循环,那么您必须计算数据集中有多少“记录”,然后将其划分由 999 得到你必须循环它的次数。

    【讨论】:

    • 是的,批量插入是一个好方法,但我不能通过创建 3 个每个大小为 999 的批次来做到这一点吗?
    • 重读最后一段。它解释了如何处理它。不过,BULK INSERT 通常更具可扩展性。另请参阅importing from a spreadsheet。
    【解决方案2】:
    <cfquery datasource="cse">
        <cfloop from="1" to="3000" index="i">
        <cfif ((i MOD 1000) EQ 1)><!--- Each SQL INSERT Can Only Handle 1000 Rows Of Data --->
        INSERT INTO Names
        (
        [colName]
        )
        VALUES
        </cfif>
        (
            '#i#'
        )
        <cfif (i LT 3000)><cfif ((i MOD 1000) NEQ 0)>,</cfif>#CHR(13)##CHR(10)#</cfif>
        </cfloop>
    </cfquery>
    

    【讨论】:

    • 您可以将数据分成多个批量插入。 cf 仍然向数据库发送单个请求。 BULK INSERT 并不总是答案,如果 CF 和数据库位于不同的机器/网络上,它会使引用数据文件变得更加困难或不可能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2013-11-30
    • 2019-08-24
    相关资源
    最近更新 更多