调用存储过程时出现以下错误:
无法找到对象“XXX”,因为它不存在或您没有权限。
我已经检查了数据库,SP在那里有正确的权限,但我仍然收到错误。
有什么建议吗?
答案 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)
答案 6 :(得分:0)
以及关于架构/安全性等的其他答案:
答案 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 权限。这是我的解决方法。