我想在下面的查询中将此内容写为SQL中的存储过程。这样做时,我无法找出如何为用ColdFusion编写的条件之一写:
<CFIF FINDNOCASE("TOTALCUSTOMERPROFILES", ORDER.USERSORT)>
, ISNULL(CPL.TOTALCUSTOMERPROFILES, 0) AS TOTALCUSTOMERPROFILES
</CFIF>
我想使select语句成为完整代码部分中cfquery标记的存储过程。谢谢。
完整代码:
<cffunction name="Get" output="false" access="public" returntype="struct">
<cfargument name="orderBy" required="false" type="string" default="lastName, firstName" hint="Valid Columns:firstName, lastName, contactTypeName, classification, title, email, phone, fax, isActive, insertedBy, modifiedBy" />
<cfscript>
var returnStruct = StructNew();
var qRates = "";
var qTotalRecords = "";
var order = structNew();
var queryOrderBy = "c.customer_name";
var endRow = arguments.startRow + arguments.rowLimit - 1;
var validArgs = false;
var i="";
for(i in arguments){
arguments[i] = Trim(arguments[i]);
}
order.userSort = arguments.orderBy;
order.defaultSort = "c.customer_name";
order.CUSTOMER_NAME="c.CUSTOMER_NAME";
order.CUSTOMER_NUMBERsupplierName="c.CUSTOMER_NUMBER";
order.TOTALCUSTOMERPROFILES="ISNULL(cpl.TOTALCUSTOMERPROFILES, 0)";
</cfscript>
<cfquery name="qRates" datasource="#variables.dsn#">
SELECT customer_name,
customername,
customer_number,
NC_ORIGIN = LEFT( dp.ORIGIN,2)
<cfif FindNoCase("totalcustomerprofiles", order.userSort)>
, ISNULL(cpl.TOTALCUSTOMERPROFILES, 0) AS TOTALCUSTOMERPROFILES</cfif>
FROM
TableName
SET NOCOUNT OFF
</cfquery>
</cffunction>
答案 0 :(得分:0)
我认为一种方法是使用存储过程的参数。 为您存储的proc添加一个新参数,例如TOTALCUSTOMERPROFILES(作为布尔值)。在该存储过程中,根据该参数的值添加或不添加列。
使用cfstoredproc标记调用它时,可以使用值指定cfprocparam。 根据结果,将CFIF设置为正确的true或false。
<!--- Concept of the call --->
<cfstoredproc ....>
<cfif FindNoCase("totalcustomerprofiles", order.userSort)>
<cfprocparam ... value="true">
<cfelse>
<cfprocparam ... value="false">
</cfif>
</cfstoredproc>
与其他注释一样,我建议总是简单地返回该列并将IF包含在输出或结果中,这要容易得多。 希望对您有所帮助。
谢谢。