4

我有一个非常奇怪的情况,我试图从网上研究答案,但无济于事。我正在使用 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_Test1在声明之前做了一个TRUNCATE,这失败了,上面的错误相同,说明tbl_Test1不存在或没有权限。

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

任何人都可以帮助或阐明我的问题。

提前谢谢了

4

1 回答 1

9

所有权链接不适用于TRUNCATE TABLE.

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

于 2012-11-16T11:37:45.503 回答