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