我有一个非常奇怪的情况,我试图从网上研究答案无济于事。我正在使用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
已存在。
我已经尝试了几件事,并且从这一点开始,对这整个情况变得更加困惑。
如果我在Select * from tbl_Test1
之前加TRUNCATE
,那么存储过程就可以了。
因为我稍后会回来选择,所以我宁愿这不存在。所以我在select @Count = count(*) from tbl_Test1
语句之前重新编码并执行了TRUNCATE
,并且上述相同的错误导致tbl_Test1
不存在或没有权限。
我完全不知道为什么会这样。我有几个其他存储过程,其中包含truncate语句,以与此语句完全相同的方式创建,并且从应用程序调用时可以正常工作。
任何人都可以帮助或解决我的问题。
非常感谢提前
答案 0 :(得分:5)
所有权将doesn't apply链接到TRUNCATE TABLE
。
您需要在存储过程中明确授予该权限(the minimum permission required is ALTER
on table_name)或使用EXECUTE AS
。仅对存储过程授予EXEC
权限是不够的。