首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用ColdFusion 2016读取csv/xsls文件并插入SQL2008数据库表?

用ColdFusion 2016读取csv/xsls文件并插入SQL2008数据库表?
EN

Stack Overflow用户
提问于 2018-05-30 03:40:14
回答 1查看 491关注 0票数 1

我有一个包含大约80k条记录的.csv文件。文件大约有15列,但我插入时只需要3列。首先,我使用SQL方法从我的服务器读取文件,然后尝试使用该技术在ColdFusion数据库表中插入多行。下面是一个例子:

代码语言:javascript
运行
复制
<cfsetting requestTimeOut = "36000" />
<cfhttp method="get" url="https://testsite.org/ZipCodes.csv" name="zipData">  

<cfquery name="qryZip" datasource="testDB">
    INSERT INTO ZipCodes(
        z_zip,
        z_city,
        z_state
    )VALUES
    <cfloop query="zipData">
    (
        <cfqueryparam value="#trim(zipData.ZipCode)#" cfsqltype="cf_sql_char" maxlength="5">,
        <cfqueryparam value="#trim(zipData.City)#" cfsqltype="cf_sql_varchar" maxlength="50">,
        <cfqueryparam value="#trim(zipData.State)#" cfsqltype="cf_sql_char" maxlength="2">
    )
    </cfloop>
</cfquery>

上面的代码一直在加载,我仍然没有在我的表中得到结果。然后我试着这样做:

代码语言:javascript
运行
复制
<cfloop query="zipData">
    <cfquery name="qryZip" datasource="testDB">
        INSERT INTO ZipCodes(
            z_zip,
            z_city,
            z_state
        )VALUES

        (
            <cfqueryparam value="#trim(zipData.ZipCode)#" cfsqltype="cf_sql_char" maxlength="5">,
            <cfqueryparam value="#trim(zipData.City)#" cfsqltype="cf_sql_varchar" maxlength="50">,
            <cfqueryparam value="#trim(zipData.State)#" cfsqltype="cf_sql_char" maxlength="2">
        )
    </cfquery>
</cfloop>

这种方法有效,但在我看来效率非常低,因为我为每个记录打开了新的数据库连接,相反,第一个解决方案应该更有效。这个文件中有80k条记录,处理速度应该很快,但我的第一个解决方案却要花费很长时间。是我做错了什么,还是这个方法有其他问题?如果有人知道如何让这个解决方案工作或其他更好的方法,请让我知道。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-05-30 05:10:29

在您的第一个代码片段中,您缺少迭代之间的逗号。正如你所看到的,你在这里解释的最初的尝试是正确的。然而,本文也警告数据锁定、查询缓冲区溢出、最大参数限制。

https://coldfusion.adobe.com/2017/11/bulk-inserting-data/

此外,在测试时,我会将一个相对较小的endrow参数添加到<cfloop>中,以查看结果代码在语法和编程上是否正确。

代码语言:javascript
运行
复制
<cfsetting requestTimeOut = "36000" />
<cfhttp method="get" url="https://testsite.org/ZipCodes.csv" name="zipData">  

<cfquery name="qryZip" datasource="testDB">
    INSERT INTO ZipCodes(
        z_zip,
        z_city,
        z_state
    )VALUES
    <cfloop query="zipData">
    <cfif currentRow NEQ 1>,</cfif>
    (
        <cfqueryparam value="#trim(zipData.ZipCode)#" cfsqltype="cf_sql_char" maxlength="5">,
        <cfqueryparam value="#trim(zipData.City)#" cfsqltype="cf_sql_varchar" maxlength="50">,
        <cfqueryparam value="#trim(zipData.State)#" cfsqltype="cf_sql_char" maxlength="2">
    )
    </cfloop>
</cfquery>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50591777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档