我正在使用 SQL Server 2008 R2,并且创建了一个 TVP,我想将其用作存储过程的参数,但我收到一条消息,指出找不到它或我没有权限.
我可以在脚本或存储过程的主体中使用 TVP,但是当我尝试将它用作参数时,我收到错误。
有什么想法吗?
编辑:为了澄清,我收到的错误是在创建存储过程时出现的
最佳答案
为了让调用者将 PROC
与表值参数一起使用,您需要(不直观地)grant execute permissions在 TVP
类型上调用 PROC
即
GRANT EXECUTE ON TYPE::[schema].[MyTVP] to [SomeRole]
编辑
我相信我能够复制这个问题,即从授予用户的最小权限集开始工作。重要的一步是 DBO 或 TVP 的模式所有者授予您以下访问权限,以便能够在 PROC
中使用它(没有此访问权限,我可以声明TVP 类型的松散变量,但不在 PROC 中使用它)。
GRANT REFERENCES ON TYPE::[schema].[MyTVP] to YOURROLE -- Or User.
Grant Reference here
(显然,您还需要 CREATE PROCEDURE
权限,以及对 PROC 中使用的任何对象的相关访问权限)
根据最初的答案,PROC 的使用者还需要拥有对 Proc 和类型的 GRANT EXECUTE
权限。
关于sql - 需要什么权限才能使用 SQL Server 表值参数 (TVP) 作为存储过程参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23679594/