0
データベースに複数の行を挿入するために値をループしている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
@Leighあなたは詳細を教えてください – Charles
エラーメッセージのSQL部分をテキストエディタにコピーして、かっこで問題が見えるように書式を設定してください。 –