2015-08-04 3 views
0

Когда ReturnCode = true, он должен populate cfstoredproc.statusCode with the status code returned by the stored procedure.Возвращен ли cfstoredproc.statusCode?

Но я могу видеть только кеширование и исполнение.

+0

Эта функция также зависит от сервера базы данных. с каким продуктом вы подключаетесь? –

+0

Microsoft SQL Service 2012 –

+0

Можете ли вы опубликовать вместе небольшой пример, демонстрирующий проблему? – Leigh

ответ

1

Вот пример, который я тестировал и работает. Возможно, проблема связана с тем, как записывается хранимая процедура, или с помощью драйвера 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 

Тогда на стороне ColdFusion с помощью 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> 
+1

Имейте в виду, что хранимые процедуры могут возвращать несколько наборов результатов. CFQuery способен обрабатывать только один * набор результатов, поэтому он не является прямым эквивалентом. (Лично я предпочитаю cfstoredproc). Поскольку эта функция должна, вы можете захотеть опубликовать небольшой экземпляр для воспроизведения. Надеюсь, кто-то может протестировать его против трех двигателей Railo, Lucee и ACF и посмотреть, можем ли мы понять, почему он работает (ошибка, разница драйверов и т. Д.). – Leigh

Смежные вопросы