无法找到对象“XXX”,因为它不存在或您没有权限

时间:2009-10-21 15:19:21

标签: sql-server stored-procedures permissions

调用存储过程时出现以下错误:

无法找到对象“XXX”,因为它不存在或您没有权限。

我已经检查了数据库,SP在那里有正确的权限,但我仍然收到错误。

有什么建议吗?

13 个答案:

答案 0 :(得分:10)

我发现在我的存储过程中“END”之后我没有关闭“GO”字样。改变Proc并加回GO为我解决了这个问题。

答案 1 :(得分:4)

好的,这就是发生的事情。在SP结束之前有一个特殊字符,所以它不完整但仍然有效,不知何故。

所以我可以看到SP并看到它的权限,但我无法运行它。因此,要解决此问题,我必须将文本复制出SQL Management Studio并将其粘贴到记事本中,然后删除特殊字符,然后将其复制并粘贴回SQL Management Studio并运行alter脚本。

角色到达那里真是太奇怪了!

答案 2 :(得分:2)

与明确答案类似: 我的存储过程的最后一行是一行,它授予存储过程作为适当用户运行的权限 - 可能是在我生成脚本时添加的。

删除它(或者可能是附加的隐藏字符)设法修复它。

" XXX"是我成功调用的存储过程的名称(它进行了所需的更改),但这给了我这个错误。

答案 3 :(得分:2)

我也遇到了这个问题。就我而言,我在创建存储过程后立即授予了执行权限。而且没有“GO'这两个陈述之间。我添加了GO,它有效。

答案 4 :(得分:1)

调用存储过程时使用的帐户不能与用于检查存储过程的帐户相同。确保用于执行sproc的帐户可以访问该对象。

答案 5 :(得分:0)

在创建和访问对象时,始终使用dbo.(或其他模式)前缀。

我最近写了这个话题:

答案 6 :(得分:0)

以及关于架构/安全性等的其他答案:

  • 你在某个地方有过DENY吗?
  • 区分大小写的对象名称并使用“错误”名称?
  • 错误的数据库上下文?例如OtherDB.dbo.Myproc

答案 7 :(得分:0)

使用'GO'也为我解决了问题。这让我疯狂,经过多次下载并检查用户和架构的权限后,这才是最终帮助的。

答案 8 :(得分:0)

在Microsoft SQL Server中,选择要使用的对象资源管理器中的对象,右键单击它,然后将脚本[对象]作为'可以为您提供成功执行操作所需的脚本,而不会出现此错误

答案 9 :(得分:0)

即使添加'GO'问题也没有解决。然后删除UPDATE STATISTICS [Table_name]语句,然后解决了我的问题。

答案 10 :(得分:0)

方案可能有所不同。如果有不同的方案,请在其前面添加。

答案 11 :(得分:0)

可能的错字或已被删除?刷新您的视图或查询(看起来像是用于存储过程的):

SELECT name AS procedure_name   
    ,SCHEMA_NAME(schema_id) AS schema_name  
    ,type_desc  
    ,create_date  
    ,modify_date  
FROM sys.procedures; 

然后,如果列出了该名称,请复制该名称,然后尝试使用从结果中获取的名称进行查询(或使用您可能熟悉的其他任何方式复制该对象的名称)。

针对任何对象的更多通用解决方案(如果您有SSMS): 在SQL Server Management Studio中,右键单击对象“ Script [OBJECT_TYPE] as”,DROP To(或您尝试的操作),New Query Editor。

如果您可以成功运行此程序,则可能是输入错误。

答案 12 :(得分:0)

如果在存储过程中有SET IDENTITY ON&OFF语句,那么您需要在用户登录名中添加 ddl_admin 权限。这是我的解决方法。