问题仅在表中尚不存在时才插入值

时间:2014-07-23 16:46:47

标签: mysql orm coldfusion

我正在将电子表格读入查询中。然后将值插入数据库表。我只想在目标表中不存在其中一个值(即PartNumber)时执行插入。

我使用下面的代码首先检查重复项。但是,在插入itemPN列时,我仍然遇到重复的问题,该列不允许重复值。

如果我刷新下面的页面,它会插入几十个值并因为另一个重复而挂起。如果我刷新它4次左右,它将插入我需要的117条记录。我很困惑为什么代码有时工作,但其他时候失败。它似乎在每次尝试时挂起相同的行。格式化变量的不同尝试产生了相同的结果。

<cfspreadsheet action="read" 
     src="#downloadDir#import.xls" 
     query="qxldata" 
     excludeheaderrow="yes" 
     columnnames="PartNumber,Name,Price,Category,IsActive,Location,Description,remarks,SubLocation">

<cfoutput query="qxldata" startrow="3">
   <cfset xlPN=qxldata.PartNumber>

   <cfquery name="noDup">
      SELECT * 
      FROM   Items
      WHERE  itemPN = #xlPN#
   </cfquery>

   <cfif NOT noDup.RecordCount EQ 1>
       <cfscript>
          //Insert a new item
          item = new items();
          item.setitemPN(PartNumber);
          item.setitemName(Name);
          item.setitemCategory(Category);
          item.setitemDescription(Description);
          item.setitemBarcodeName("bc"&PartNumber&".jpg");
          item.setitemImageName(PartNumber&".jpg");
          item.setitemReorderPoint(NumberFormat("", 0.00));
          item.setitemReorderQuantity(NumberFormat("", 0.00));
          item.setitemLocation(Location);
          item.setitemSubLocation(SubLocation);
          item.setitemLength(NumberFormat("", 0.00));
          item.setitemWidth(NumberFormat("", 0.00));
          item.setitemHeight(NumberFormat("", 0.00));
          item.setitemRemarks(remarks);
          item.setitemIsActive(IsActive);
          item.setitemVendorID("1");
          item.setitemPrice(NumberFormat(Price, 0.00));
          EntitySave(item);
       </cfscript>
    </cfif>
</cfoutput>

感谢您的期待!

1 个答案:

答案 0 :(得分:0)

像这样排除故障:

<cfoutput query="qxldata" startrow="3" maxrows="3">
<cfset xlPN=qxldata.PartNumber>
 #xlPN# <br>
</cfoutput>

您很可能会看到三个相同的值。您可以通过指定所需的行号来解决该问题,

<cfset xlPN=qxldata.PartNumber[currentrow]>

或者完全跳过该变量并改变它:

WHERE itemPN = #xlPN#

到此:

WHERE itemPN = #PartNumber#

或者更好,对此:

WHERE itemPN = <cfqueryparam cfsqltype="cf_sql_integer" value="#PartNumber#">