我有一个存储过程,根据表中是否存在提供的Windows用户名,返回的值为0或1。
我已经添加了VBA以执行存储过程并处理返回值,因此可以将其用作变量,但是代码在Execute
阶段失败,
[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]过程或函数'x01_sl_getUserExists'指定了太多参数。
此处简化了存储过程:
USE [Database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Procedure]
@windowsAD nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @usrStatus int
SELECT @usrStatus = COUNT(1) FROM [SYS_Login] as lgn WHERE lgn.[SYS_LoginAD] = @windowsAD;
RETURN @usrStatus
END
要执行并在此处返回的VBA代码:
Dim db As ADODB.Connection
Dim pr As ADODB.Parameter
Dim pr2 As ADODB.Parameter
Dim sp2 As ADODB.Command
Dim usrStatus as Integer
Set db = New ADODB.Connection
Set sp2 = New ADODB.Command
Set pr = sp2.CreateParameter("ReturnValue", adInteger, adParamReturnValue)
Set pr2 = sp2.CreateParameter("@windowsAD", adVarChar, adParamInput, 50, getUserID)
With sp2
.CommandText = "Procedure"
.CommandType = adCmdStoredProc
.ActiveConnection = db
.Parameters.Refresh
.Parameters.Append pr
.Parameters.Append pr2
End With
sp2.Execute '// CODE FAILS HERE
usrStatus = sp2.Parameters("@return_value")
基本上,我想获得0(用户不存在)或1(用户确实存在)的RETURN值,因此我可以将其分配给变量usrStatus
,然后从那里返回。
答案 0 :(得分:2)
.Parameters.Refresh
populates Parameters
集合。
然后,您手动添加相同的参数,最后以四个参数代替两个参数。
要么删除Refresh
,要么不要手动创建参数。