У меня есть cfquery, что я перебираю значения, чтобы вставить несколько строк в базу данных. Я должен сделать это таким образом, вместо того, чтобы генерировать несколько запросов INSERT в цикле, потому что мне нужен список generatedKeys
после INSERT. Однако мой запрос теперь бросает ошибку ниже. Я знаю, что означает ошибка, но это не имеет смысла, основываясь на моем запросе.Вставить ошибку запроса: количество столбцов не соответствует количеству значений в строке 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>
<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 динамически я часто выводя сгенерированную строку сначала, ' INSERT INTO .... ', чтобы легче распознать эту синтаксическую ошибку. Кроме того, я могу скопировать и вставить sql в IDE, если это необходимо. –
Leigh
@ Вы можете подробно рассказать – Charles
Скопируйте часть сообщения об ошибке в текстовый редактор и отформатируйте его так, чтобы вы могли видеть проблему с круглыми скобками. –