目录
北极星书库
嵌人使用动态参数的SQL查询是将用户输入与数据库字段相对应起来的强大机制。但是,在更复杂的应用程序中,通常不仅需要根据用户输入决定查询内容,而且需要根据用户输入决定查询的结构。
动态SQL使你能够动态地决定(根据运行时参数)对数据库执行SQL语句的哪一部分。例如,如果用户没有在一个查询字段中输入数据,你可以忽略WHERE从句中与该字段相关的部分。如果用户没有指定按哪个字段排序,则整个ORDER BY从句可以被忽略。
在ColdFusion中动态SQL的实现是利用CFIF/CFELSEIF/CFELSE标签控制SQL语句的建立。在CFQUERY中一个动态SQL语句有如下形式:
<CFQUERY NAME=" queryname"
DATASOURCE=" datasourcename" >
...Base SQL statement
<CFIF value operator value >
...additional SQL
</CFIF>
</CFQUERY>
在下面的例子中,用一系列CFIF标签来确定将哪一个SQL语句追加到基本SQL SELECT语句后面:
<CFQUERY NAME="GetParkList"
DATASOURCE="CF 4.0 Examples">
SELECT *
FROM Parks
WHERE 0=0
<CFIF #ParkName# is not "">
AND ParkName LIKE ‘%#ParkName#%’
</CFIF>
<CFIF #ParkType# is not "AllTypes">
AND ParkType = ‘#ParkType#’
</CFIF>
<CFIF #Region# is not "AllRegions">
AND Region = ‘#Region#’
</CFIF>
<CFIF #State# is not "">
AND State = ‘#State#’
</CFIF>
</CFQUERY>
提示:WHERE 0=0从句对数据库查询不产生任何影响。但如果所有的CFIF条件都不成立,该从句可以保证WHERE从句不会产生SQL语法错误。
下面的例子演示了如何用动态SQL来确保一个多选列表框的输入:
<CFQUERY NAME="GetParkList"
DATASOURCE="CF 4.0 Examples">
SELECT *
FROM Parks
WHERE 0=0
<CFIF IsDefined("ParkName_ID")>
AND ParkName_ID IN (#Form.ParkName_ID#)
</CFIF>
</CFQUERY>
前页
目录
北极星书库