我有以下存储过程。
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.
以下是我的ado代码:
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 :(得分:1)
这里有一些关于输出参数和结果集的混淆。你想要从你的程序中捕获SELECT的@myvare的值;这不是一个“out参数”,而是一个简单的结果集,就像你从常规表中选择它一样。它应该在客户端程序中“rs”变量中的任何其他结果集中捕获。
相反,输出参数是一个定义为具有OUTPUT限定符的过程参数之一,并被定义为SqlCommand
对象SqlParameter
方向为Output
。如果在执行之前没有定义OUCLUT参数,则不会从客户端代码中的过程获取OUTPUT参数的值,然后在过程返回后检查它的值,类似于下面的行(在第一个参数定义之后)在执行之前):
SqlParameter prevRunDate = new SqlParameter("@PrevRunDate", SqlDbType.VarChar);
prevRunDate.Direction = ParameterDirection.Output;
prevRunDate.Size = 10;
cmd.Parameters.Add(prevRunDate);