当 ReturnCode=true 时,它应该使用存储过程返回的状态代码填充 cfstoredproc.statusCode。
但我只能看到缓存和执行时间。
这是我测试和工作的一个例子。问题可能在于存储过程的编写方式或用于连接数据库的 JDBC 驱动程序。
您手头的另一个选择是不使用标签来调用存储过程。您还可以使用 cfquery 标记调用存储过程。这通常会给出更可预测的结果。
下面是测试过程的代码:
CREATE PROCEDURE dbo.PTest
@Somename nvarchar(50) = NULL, -- NULL default value
@SomeResponse nvarchar(50) = NULL OUTPUT
AS
IF @Somename IS NULL
BEGIN
RETURN(1)
END
ELSE
SET @SomeResponse = 'Hello World:' + @Somename;
BEGIN
RETURN(2)
END
然后在冷融合端使用 cfstoredproc 标签:
<cfstoredproc datasource="yourdatasource" procedure="dbo.PTest" returncode="yes">
<cfprocparam type="in" variable="Somename" cfsqltype="cf_sql_varchar" value="John Smith">
<cfprocparam type="out" variable="SomeResponse" cfsqltype="cf_sql_varchar">
</cfstoredproc>
<cfoutput>
#SomeResponse#
<cfdump var="#cfstoredproc#">
</cfoutput>
使用 cfquery 这看起来像这样:
<cfquery name="qFoo" datasource="yourdatasource">
SET NOCOUNT ON
DECLARE @SomeResponse varchar(50), @return_code int;
EXECUTE @return_code = dbo.PTest 'John Smith', @SomeResponse = @SomeResponse OUTPUT
SET NOCOUNT OFF
SELECT @return_code as returnCode,
@SomeResponse as someResponse
</cfquery>
<cfoutput>
#qFoo.returnCode# | #qFoo.someResponse#
<cfdump var="#qFoo#">
</cfoutput>