Я создал хранимую процедуру и могу выполнить ее с VBA ниже. Я дал группе пользователей (членом которой я являюсь) Разрешение на выполнение. Все члены этой группы, кроме меня, получают ошибку «не удалось найти хранимую процедуру» при запуске VBA. Пользователи могут войти в систему через SSMS и выполнить хранимую процедуру, щелкнув ее правой кнопкой мыши.
Когда я смотрю на вкладку «Действующий», где мне предоставлены разрешения «Выполнить», возникает ошибка: не удается выполнить роль участника-сервера, поскольку основной объект «MyUserGroup» не существует, этот тип участника не может быть олицетворен или у вас нет разрешения .
Администратор SQL сказал мне, что у моей группы есть разрешения на уровне DBO. Что мне не хватает? Почему они не могут найти хранимую процедуру при выполнении Excel VBA? Или эта ошибка говорит мне, что я не могу дать им разрешение, когда я смогу?
Excel VBA для вызова хранимой процедуры:
Function Sproc()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim cmd As ADODB.Command
Dim ConnectionString As String
Dim StrSproc As String
Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=ThisDatabase;Data Source=ThisSource;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=ThisSourceID;Use Encryption for Data=False;Tag with column collation when possible=False"
cnn.Open ConnectionString
cnn.CommandTimeout = 900
Set rst = New ADODB.Recordset
StrSproc = "ExportListToExcel"
rst.ActiveConnection = cnn
rst.Open StrSproc
For i = 0 To rst.Fields.Count - 1
Cells(1, i + 1).Value = rst.Fields(i).Name
Next i
Cells(2, 1).CopyFromRecordset rst
Exit Function