SQL Server 数据库:找不到明确存在的对象

Posted

技术标签:

【中文标题】SQL Server 数据库:找不到明确存在的对象【英文标题】:SQL Server database: Can't find an object which clearly exists 【发布时间】:2017-03-17 06:05:31 【问题描述】:

编辑:如何赋予用户定义类型 exec 权限?

看起来“Bug2”是用户定义的类型。

select * from sys.types
where is_user_defined = 1 and name = 'Bug2'

现在要摆脱这个错误:

"对象'Bug2'的EXECUTE权限被拒绝,数据库 'abc',架构 'dbo'"

我应该使用什么命令?


我只是在玩别人的代码,碰到了这个:

如果我这样做

DECLARE @bugList Bug2

SELECT * 
FROM @bugList

然后我得到结果

如果我这样做了

SELECT * 
FROM Bug2

然后我得到一个

对象名称“Bug2”无效。

这是怎么回事?

基本上我正在尝试运行一个使用此“Bug2”的存储过程,由于存在一些权限问题,我在运行它时遇到了这个错误:

对象“Bug2”、数据库“abc”、模式“dbo”的执行权限被拒绝。

所以我想做的就是:

GRANT EXEC ON Bug2 TO PUBLIC

但 SQL Server 无法找到此对象“Bug2”,因此会引发错误。

谁能帮忙?

【问题讨论】:

,Bug2 什么样的类型。 【参考方案1】:

好的。使用它可以正常工作:

GRANT EXECUTE ON TYPE::Bug2 to PUBLIC

谢谢!

【讨论】:

【参考方案2】:

不要使用sys.types,而是使用sys.objects。如果Bug2 是一个表,那么查询看起来像:

SELECT * FROM sys.objects WHERE name='Bug2' AND type='U'

【讨论】:

【参考方案3】:

这是一个user-defined table type(通常用于表值参数)。查看 db_nm > programmability > types > user-defined table types,您将看到一个 bug2 对象。您可以解决该对象的权限问题(通过脚本或 GUI)。

脚本选项:

use [abc]
GO
GRANT EXECUTE ON TYPE::[dbo].[bug2] TO [public]

【讨论】:

以上是关于SQL Server 数据库:找不到明确存在的对象的主要内容,如果未能解决你的问题,请参考以下文章

装了VS2008后SQL SERVER服务器找不到,SQL SERVER配置工具中也没东西

在 SQL Server 2012 中出现以下错误“找不到用户 '<user>',因为它不存在或您没有权限”

在 SQL Server 2008 中找不到用户定义的函数

SQL Server Management Studio 17找不到一个或多个组件

报错sql读取excel 时 microsoft jet 数据库引擎找不到对象"demo1",请确保对象存在。

里正数据库引擎找不到