2015-06-11 3 views
1

У меня есть следующая хранимая процедура.Возврат хранимой процедуры, ado, access, vba

create procedure dbo.sp_getDailyStats 
    @Rundate varchar(10), @PrevRunDate varchar(10) OUTPUT 
as 
Declare @Claims bigint; 
declare @Days bigint; 
declare @Claims_Completed_prev bigint; 
declare @Claim_inventory bigint; 
declare @Inv30 bigint; 
declare @Inv30NP bigint 
declare @InvNP bigint 

set @PrevRundate=convert(varchar(10),dbo.getPreviousBusinessDate(@Rundate),101) 

----- not the whole code. 

Я запустить его из командной строки следующим образом:

declare @myvare varchar(10) 
declare @InputDate varchar(10) 
set @InputDate='06/10/2015' 
exec dbo.sp_getDailystats @InputDate, @myvare output 

select @myvare; and it returns the previous date to @myware but I have to put output on that line to make it work. 

Ниже мой лукаво код:

Dim cn As New ADODB.Connection 
Dim cmd As New ADODB.Command 
Dim rs As New ADODB.Recordset 

Dim Newdate As String 
Newdate = "06/10/2015" 
Dim Prevdate As String 

cn.Open "Provider=sqloledb; " & _ 
"Data Source=" & "BLD-FS-SQLVS01\PRDINST1, 4020" & ";" & _ 
"Initial Catalog=" & "HNFS_NetProv" & ";" & _ 
"Integrated Security=SSPI;" 

Set cmd.ActiveConnection = cn 
cmd.CommandText = "sp_getDailyStats" 
cmd.CommandType = adCmdStoredProc 

cmd.Parameters(1) = Newdate 


rs.CursorType = adOpenStatic 
rs.CursorLocation = adUseClient 
rs.LockType = adLockOptimistic 
Set rs = cmd.Execute 

Prevdate = cmd(2) 


Set rs = Nothing 
Set cn = Nothing 

Ado автоматически распознает, что у меня есть два параметра, но не возвращается cmd (2)

Как я могу получить свою ценность? Все примеры, которые я вижу, хотят, чтобы я добавлял/создавал параметры, которые мне не нужно делать. Мне просто нужно, чтобы парасектер появился, но у меня нет способа вывода результатов на процедуру.

+0

Примечание: вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) и вы рискуете столкнуться с именем когда-нибудь в будущем. [Это также плохо для производительности вашей хранимой процедуры] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Лучше просто просто избегать 'sp_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –

+1

Результат: SELECT'ing вне процедуры не является параметром out. Это набор результатов, точно так же, как если бы вы выбрали одно поле из фактической таблицы. Посмотрите, что может быть в «rs» после инструкции Execute(). –

ответ

1

Здесь немного путаницы о выходных параметрах и наборах результатов. Вы хотите записать значение @myvare, которое выбрано вне вашей процедуры; это не параметр «out», а простой результат, как если бы вы выбрали его из обычной таблицы. Он должен быть зафиксирован среди любых других наборов результатов в переменной «rs» в вашей клиентской программе.

В противоположности этому, параметр выхода один определен в качестве одного из параметров в процедуру с выходными классификатором, и определяется в SqlCommand объекта как SqlParameter с направлением Output. Вы не получите значение параметра OUTPUT из процедуры в вашем клиентском коде, если вы не определяете его до выполнения, а затем проверяете его значение после того, как процедура вернется, что-то в соответствии с строками следующего (после определения первого параметра и перед выполнением):

SqlParameter prevRunDate = new SqlParameter("@PrevRunDate", SqlDbType.VarChar); 
prevRunDate.Direction = ParameterDirection.Output; 
prevRunDate.Size = 10; 
cmd.Parameters.Add(prevRunDate); 
+0

дим prevRunDate в качестве параметра Set prevRunDate = cmd.CreateParameter ("@ PrevRunDate", adVarChar, adParamOutput, 10) 'prevRunDate.Direction = adParamOutput ' prevRunDate.Size = 10 «prevRunDate.Size = 10; cmd.Parameters.Append prevRunDate – schalld

+0

Когда я вставил вышеприведенный код, я получил следующее. Кстати, это Access2010 vba против sql 2000 sqlserver. – schalld

+0

Я получил его для работы со следующим: cmd.Parameters (2). Направление = adParamOutput cmd.Execute Prevdate = cmd (2) – schalld

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

  • Нет связанных вопросов^_^