【发布时间】:2019-10-30 21:01:13
【问题描述】:
我有一个返回值 0 或 1 的存储过程,具体取决于提供的 Windows 用户名是否存在于表中。
我添加了 VBA 来执行存储过程并处理返回值,因此我可以将其用作变量,但代码在 Execute 阶段失败:
[Microsoft][ODBC SQL Server Driver][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 并从那里开始。
【问题讨论】:
标签: sql sql-server vba ms-access