首页 > 解决方案 > 检查是否有任何字段与数据库值不同

问题描述

提交表单后,我需要检查数据库表中的任何字段是否更改。如果改变了,我创建一个新记录,如果没有,我什么也不做。我不能只更新记录。

有没有办法在不检查每个字段(如下面的代码)的情况下做到这一点?

<cfquery name="getData" datasource="myDS">
  Select * From table Where ID = #form.ID#
</cfquery>
<Cfset changed = false />
<!-- Check every field -->
<cfif form.data1 neq getData.data1>
   <cfset changed = true />
</cfif>
<cfif form.data2 neq getData.data2>
   <cfset changed = true />
</cfif>
<cfif form.data3 neq getData.data3>
   <cfset changed = true />
</cfif>
...

谢谢

标签: coldfusioncfccfquery

解决方案


可能取决于您使用的数据库,但如果数据不存在,您应该能够执行将插入的查询。

例如,我刚刚使用 CF2016 Enterprise 对 Oracle 12c 进行了测试,如果数据不存在,它会创建一个新记录。

<cfquery name="Testing" datasource="Test">
    INSERT INTO TESTTABLE (DATA1, DATA2, DATA3)
    SELECT  <cfqueryparam value="#Form.Data1#" cfsqltype="CF_SQL_VARCHAR" />, <cfqueryparam value="#Form.Data2#" cfsqltype="CF_SQL_VARCHAR" />, <cfqueryparam value="#Form.Data3#" cfsqltype="CF_SQL_VARCHAR" />
    FROM dual
    WHERE NOT EXISTS 
    (SELECT DATA1, DATA2, DATA3 FROM TESTTABLE WHERE DATA1 = <cfqueryparam value="#Form.Data1#" cfsqltype="CF_SQL_VARCHAR" />, 
    AND DATA2 = <cfqueryparam value="#Form.Data2#" cfsqltype="CF_SQL_VARCHAR" /> AND DATA3 = <cfqueryparam value="#Form.Data3#" cfsqltype="CF_SQL_VARCHAR" />)
</cfquery>

推荐阅读