我创建了一个存储过程,可以用下面的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
答案 0 :(得分:1)
StrSproc =“ ExportListToExcel”
首先要解决名称解析问题。
不带模式限定符的名称将首先在用户的默认模式中解析,然后在dbo
模式中解析。
因此要确定模式名称是否符合程序名称。