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

时间:2017-03-17 06:05:31

标签: sql sql-server tsql sql-server-2012

编辑:如何为用户定义的类型提供exec权限?

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

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

现在摆脱这个错误:

  

“数据库对象'Bug2'上的EXECUTE权限被拒绝   'abc',schema'dbo'“

我应该使用什么命令?

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

如果我这样做

DECLARE @bugList Bug2

SELECT * 
FROM @bugList

然后我得到了结果

但如果我这样做

SELECT * 
FROM Bug2

然后我得到了

  

无效的对象名称'Bug2'。

这里发生了什么?

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

  

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

所以我想做的就是:

GRANT EXEC ON Bug2 TO PUBLIC

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

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

确定。用它来工作:

GRANT EXECUTE ON TYPE::Bug2 to PUBLIC

谢谢!

答案 1 :(得分:0)

而不是使用sys.types使用sys.objects。如果Bug2是一个表,则查询如下:

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

答案 2 :(得分:0)

它是user-defined table type(通常用于表值参数)。查看db_nm&gt;可编程性&gt;类型&gt;用户定义的表类型,您将看到一个df$Y <- df[-1][cbind(1:nrow(df), df$Z)] df # Z Y_1 Y_2 Y_3 Y #1 3 0.89124772 1.4377700 0.05226285 0.05226285 #2 1 0.89186873 -0.6984839 -0.86141525 0.89186873 #3 1 -0.01315678 1.5193461 0.18290065 -0.01315678 #4 3 -0.57857274 -1.4445197 2.03764943 2.03764943 #5 3 -0.19793692 -0.1818225 1.10270877 1.10270877 #6 2 1.48291431 2.7264541 0.70129357 2.72645410 对象。您可以解决该对象的权限问题(通过脚本或GUI)。

脚本选项:

df <- structure(list(Z = c(3L, 1L, 1L, 3L, 3L, 2L), Y_1 = c(0.89124772, 
0.89186873, -0.01315678, -0.57857274, -0.19793692, 1.48291431
), Y_2 = c(1.43777, -0.6984839, 1.5193461, -1.4445197, -0.1818225, 
2.7264541), Y_3 = c(0.05226285, -0.86141525, 0.18290065, 2.03764943, 
1.10270877, 0.70129357)), .Names = c("Z", "Y_1", "Y_2", "Y_3"
), row.names = c("1", "2", "3", "4", "5", "6"), class = "data.frame")