У меня есть хранимая процедура, которая возвращает значение 0 или 1, в зависимости от того, существует ли указанное имя пользователя Windows в таблице.
Я добавил 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 (пользователь существует), чтобы я мог присвоить его переменной usrStatus
и перейти оттуда.