【发布时间】: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 时,我经常先输出生成的字符串
<cfoutput>INSERT INTO .... </cfoutput>,以便更容易发现这种语法错误。另外,如果需要,我可以将 sql 复制并粘贴到 IDE 中。 -
@Leigh 你能详细说明一下吗
-
将错误信息的sql部分复制到文本编辑器并格式化,以便用括号看到问题。
-
看看MySQL docs。有效的 VALUES 子句如下所示:
VALUES(1,2),(4,5),(7,8);。忽略参数,即“(param X)”,注意到你的有额外的括号吗?
标签: mysql coldfusion insert-into cfquery