如何使用具有超过1000条记录的ColdFusion进行批量插入?

时间:2014-03-10 12:50:27

标签: sql sql-server coldfusion batch-processing

我的电子表格包含大约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条记录并且一次可以执行?

2 个答案:

答案 0 :(得分:5)

您可以使用应该处理极大数据集的BULK INSERT语句。

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

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

如果你有理由不使用BULK INSERT 并希望将其分解为999的循环,那么你必须弄清楚有多少&#39;记录&#39;在数据集中,将其除以999以获得您必须循环的次数。

答案 1 :(得分:0)

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