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

时间:2012-11-16 10:13:55

标签: sql-server sql-server-2008 stored-procedures truncate 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存储过程有执行权限,调用应用程序正在登录为。{/ p>

表格tbl_Test1已存在。

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

  1. 如果我在Select * from tbl_Test1之前加TRUNCATE,那么存储过程就可以了。

  2. 因为我稍后会回来选择,所以我宁愿这不存在。所以我在select @Count = count(*) from tbl_Test1语句之前重新编码并执行了TRUNCATE,并且上述相同的错误导致tbl_Test1不存在或没有权限。

    < / LI>

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

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

    非常感谢提前

1 个答案:

答案 0 :(得分:5)

所有权将doesn't apply链接到TRUNCATE TABLE

您需要在存储过程中明确授予该权限(the minimum permission required is ALTER on table_name)或使用EXECUTE AS。仅对存储过程授予EXEC权限是不够的。