存储过程中的truncate table上发生错误

Ada*_*dam 3 sql-server stored-procedures truncate sql-server-2008 user-permissions

我有一个非常奇怪的情况,我试图从网上研究答案无济于事.我正在使用SQL Server 2008 R2.

我创建了一个存储过程,TRUNCATE TABLE在其他T-SQL语句中有一个 语句.

从SQL Server Management Studio运行时,存储过程运行时没有错误.

从Windows窗体应用程序(使用.NET Framework 4在VB.Net中编写)运行时,我收到错误

找不到对象tbl_Test1,因为它不存在或您没有权限

与数据库的连接是在应用程序中正确设置的,更奇怪的是我有其他存储过程以完全相同的方式创建,使用它们自己的TRUNCATE TABLE语句,这些仍然可以正常运行.

对存储过程有执行权限User_Role,调用应用程序正在登录.

该表tbl_Test1存在.

我已经尝试了几件事,并且从这样做开始,对这整个情况变得更加困惑.

  1. 如果我把Select * from tbl_Test1之前TRUNCATE,那么存储过程的工作.

  2. 因为我稍后会返回一个选择,我宁愿这不存在.所以我select @Count = count(*) from tbl_Test1TRUNCATE语句之前重新编码并做了一个,并且在上面说明tbl_Test1不存在或没有权限时出现同样的错误.

我完全不知道为什么会发生这种情况.我有几个其他存储过程,其中包含truncate语句,以与此语句完全相同的方式创建,并且从应用程序调用时工作正常.

任何人都可以帮助或解决我的问题.

提前谢谢了

Mar*_*ith 7

所有权链并不适用TRUNCATE TABLE.

您需要明确授予该权限(所需的最小权限ALTER在table_name上)或EXECUTE AS在存储过程中使用.给予EXEC对存储过程的权限是不够的.