【问题标题】:Insert query error: Column count doesn't match value count at row 1插入查询错误:列计数与第 1 行的值计数不匹配
【发布时间】:2017-02-06 20:26:22
【问题描述】:

我有一个 cfquery,我正在循环遍历这些值以将多行插入到数据库中。我必须这样做,而不是在循环中生成多个 INSERT 查询,因为我需要在 INSERT 之后列出generatedKeys。但是我的查询现在抛出下面的错误。我知道错误的含义,但根据我的查询,它没有意义。

查询:

<cfquery datasource="#OLMSdatasourceWrite#" result="myResult">
    INSERT INTO OLMS_Data_RatioScenarios
    (
        OLMS_Account_ID,
        OLMS_RatioScenario_Name
    )
    VALUES
    (
    <cfset numItems = ListLen(AccountListWithSettings)>
    <cfset i = 1>

    <cfloop list="#AccountListWithSettings#" index="CurrentAccount">
        (<cfqueryparam cfsqltype="cf_sql_numeric" value="#CurrentAccount#" maxlength="255">
        , <cfqueryparam cfsqltype="cf_sql_clob" value="#requestBody.value#" maxlength="255">
        )
        <cfif i lt numItems>
            ,
        </cfif>

        <cfset i++>
    </cfloop>
    )
</cfquery>

<cfoutput>Inserted ID is: #myResult.generatedkey#</cfoutput>

错误:

Root Cause:java.sql.SQLException: Column count doesn't match value count at row 1
SQL: INSERT INTO OLMS_Data_RatioScenarios ( OLMS_Account_ID, OLMS_RatioScenario_Name ) 
VALUES ( ( (param 1) , (param 2) ) , ( (param 3) , (param 4) ) , ( (param 5) , (param 6) ) ) 

【问题讨论】:

  • 查看您生成的 VALUES 子句。它不是有效的 sql。你的括号太多了。在动态生成 SQL 时,我经常先输出生成的字符串&lt;cfoutput&gt;INSERT INTO .... &lt;/cfoutput&gt;,以便更容易发现这种语法错误。另外,如果需要,我可以将 sql 复制并粘贴到 IDE 中。
  • @Leigh 你能详细说明一下吗
  • 将错误信息的sql部分复制到文本编辑器并格式化,以便用括号看到问题。
  • 看看MySQL docs。有效的 VALUES 子句如下所示:VALUES(1,2),(4,5),(7,8);。忽略参数,即“(param X)”,注意到你的有额外的括号吗?

标签: mysql coldfusion insert-into cfquery


【解决方案1】:

更正的代码:

<cfquery datasource="#OLMSdatasourceWrite#" result="myResult">
    INSERT INTO OLMS_Data_RatioScenarios
    (
        OLMS_Account_ID,
        OLMS_RatioScenario_Name
    )
    VALUES
    <cfset numItems = ListLen(AccountListWithSettings)>
    <cfset i = 1>
    <cfloop list="#AccountListWithSettings#" index="CurrentAccount">
        (
          <cfqueryparam cfsqltype="cf_sql_numeric" value="#CurrentAccount#" maxlength="255">
         , <cfqueryparam cfsqltype="cf_sql_clob" value="#requestBody.value#" maxlength="255">
        )
        <cfif i lt numItems>
            ,
        </cfif>

        <cfset i++>
    </cfloop>
</cfquery>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多