coldfusion - 检查是否有任何字段与数据库值不同
问题描述
提交表单后,我需要检查数据库表中的任何字段是否更改。如果改变了,我创建一个新记录,如果没有,我什么也不做。我不能只更新记录。
有没有办法在不检查每个字段(如下面的代码)的情况下做到这一点?
<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>
...
谢谢
解决方案
可能取决于您使用的数据库,但如果数据不存在,您应该能够执行将插入的查询。
例如,我刚刚使用 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>
推荐阅读
- oracle - 将 SQL Server 查询转换为 Oracle
- rest - Clojure:如何为服务器设置特定的 url?
- vue.js - How to call REST api in NUXT efficiently? (also at component based frontend frameworks)
- c# - 当路径包含哈希 (#) 时,在 Visual Studio 中使用相对路径指定 XML 架构的问题
- arrays - 如何检查对象是否存在于Angular中的对象数组中
- c# - Xamarin.Forms MVVM Entry 和 Property 之间的两种方式绑定不起作用(Entry.Text 未使用 PropertyChanged 更新)
- html - 响应式菜单在显示时将固定栏向下推
- c# - 折叠系列空间
- javascript - 解决 301 重定向并存储 url 以供将来使用 javascript
- python - Matplotlib - 沿基本方向往返点的箭头