是否可以将存储过程结果传递给ColdFusion中的另一个cfstoredproc



我想将存储过程结果传递给ColdFusion中的另一个存储过程。如果有人能帮忙的话。

<cfif not isDefined("getYN")>
<cfstoredproc procedure="stored_proc" datasource="#dsn#">
<cfprocparam cfsqltype="cf_sql_varchar" dbvarname="@lang" type="in" value="#this.lang#"/>
<cfprocparam cfsqltype="cf_sql_varchar" dbvarname="@sqlStatement" type="in" value="#getYN#" null="#NOT len(trim(getYN))#" />            
<cfprocresult name="getYN" resultset = "1">
</cfstoredproc>
</cfif>
<cfstoredproc procedure="sp_test" datasource="#dsn#">
<cfprocparam cfsqltype="cf_sql_varchar" dbvarname="@lang" type="in" value="#this.lang#"/>
<cfprocparam cfsqltype="cf_sql_varchar" dbvarname="@sqlStatement" type="in" value="#getYN#" null="#NOT len(trim(getYN))#" />            
<cfprocresult name="get" resultset = "2">
</cfstoredproc>

以上是代码示例。在第二个存储过程中,我将第一个存储过程的结果传递给第二个储存过程的dbvarname sqlStatement。但是传递的值#getYN#应该是query而不是result,因为我将它用于FROM子句。

SQL Server中的第二个存储过程如下所示:

ALTER PROCEDURE [dbo].[sp_test]
@lang CHAR(5),
@code VARCHAR(20),
@sqlStatement NVARCHAR(MAX) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sSQL nVARCHAR(max)
SET @sSQL = '   SELECT col1
FROM '+ @sqlStatement +
' WHERE col2 = @lang
AND col3 = @code '
EXECUTE SP_EXECUTESQL @sSQL, N'@lang CHAR(5),
@code VARCHAR(20)', @lang, @code ;
SET NOCOUNT OFF;
END

此外,上面两个代码是由下面的代码创建的,用cfstoredproc代替cfquery:

<cfif NOT isDefined("request.getYN")>
<cfquery name="request.getYN" datasource="#request.dsn.pqr#">
SELECT
LANGUAGE_CODE                ,
YN_CODE                ,
YN_DESCRIPTION          
FROM
LANGUAGE_ALTS_YN          
WHERE
language_code IN (
'EN','#this.lang#'
)        
</cfquery>
</cfif>
<cfquery name="get" dbtype="query">
SELECT
yn_description        
FROM
request.getYN        
WHERE
language_code =
<cfqueryparam cfsqltype="cf_sql_varchar" value="#this.lang#" />         
AND yn_code = <cfqueryparam cfsqltype="cf_sql_varchar" 
value="#arguments.code#" />      
</cfquery>

第二个查询实际上不是查询。它不能被制作成存储过程,因为它不在数据库服务器上运行。换句话说,dbtype="query"不在数据库服务器上

此外,您可以直接筛选这些数据。

过去

<cfquery name="get" dbtype="query">
SELECT yn_description        
FROM
request.getYN        
WHERE
language_code = <cfqueryparam cfsqltype="cf_sql_varchar" value="#this.lang#" />
AND yn_code = <cfqueryparam cfsqltype="cf_sql_varchar" 
value="#arguments.code#" />      
</cfquery>

应该是

get = request.getYN.filter(function () {
return (lang_code == this.lang && yn_code == code);
});

注意:我第二行的代码没有作用域。这不是一个错误。

有关查询筛选器,请参阅:https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-m-r/queryfilter.html

基于注释的代码

get = request.getYN.filter(function () {
return (lang_code == this.lang && yn_code == code);
}).yn_description;

BTW:除非字段是大文本、varchar(max(或xml,否则选择一个或所有通常都很重要

最新更新