2017-02-06 2 views
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))) 
+0

가 생성 된 VALUES 절을 살펴보십시오. 유효한 SQL이 아닙니다. 괄호가 너무 많습니다. SQL을 동적으로 생성 할 때 생성 된 문자열 인 ' INSERT INTO ....'을 종종 출력하여 그러한 종류의 구문 오류를보다 쉽게 ​​찾아냅니다. 또한 필요한 경우 SQL을 복사하여 IDE에 붙여 넣을 수 있습니다. – Leigh

+0

@Leigh 당신은 정교하게하십시오 – Charles

+0

오류 메시지의 SQL 부분을 텍스트 편집기로 복사하여 괄호로 문제를 볼 수 있도록 형식을 지정하십시오. –

답변

0

수정 코드 :

<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> 
관련 문제