Sql server 存储过程中截断表时出错

Sql server 存储过程中截断表时出错,sql-server,sql-server-2008,stored-procedures,truncate,user-permissions,Sql Server,Sql Server 2008,Stored Procedures,Truncate,User Permissions,我有一个非常奇怪的情况,我试图从网上研究答案,但没有结果。我正在使用SQLServer2008R2 我创建了一个存储过程,其中包含一个TRUNCATE TABLE语句和其他T-SQL语句 从SQLServerManagementStudio运行时,存储过程运行时不会出错 当从Windows窗体应用程序(用VB.Net和.Net Framework 4编写)运行时,我收到了错误消息 找不到对象tbl_Test1,因为它不存在或您不存在 没有权限 与数据库的连接在应用程序中设置正确,更奇怪的是,我有

我有一个非常奇怪的情况,我试图从网上研究答案,但没有结果。我正在使用SQLServer2008R2

我创建了一个存储过程,其中包含一个
TRUNCATE TABLE
语句和其他T-SQL语句

从SQLServerManagementStudio运行时,存储过程运行时不会出错

当从Windows窗体应用程序(用VB.Net和.Net Framework 4编写)运行时,我收到了错误消息

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

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

用户\u角色
的存储过程具有执行权限,调用应用程序正在以身份登录该角色

tbl_Test1
确实存在

我尝试过几件事,但由于这样做,我对整个情况变得更加困惑

  • 如果我将
    Select*from tbl_Test1
    放在
    TRUNCATE
    之前,则存储过程可以工作

  • 因为我稍后返回select,所以我希望它不存在。因此,在
    TRUNCATE
    语句之前,我重新编码并从tbl_Test1中选择@Count=Count(*),这失败了,与上面的错误相同,说明
    tbl_Test1
    不存在或没有权限

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

    有人能帮我解决问题吗

    非常感谢您提前

    将所有权链接到
    截断表


    您需要显式地授予该权限()或在存储过程中使用
    executeas
    。仅对存储过程授予
    EXEC
    权限是不够的。

    当不允许查看代码时,我们在调试方面做得很差。存储过程中的所有代码都是TRUNCATE表tbl\U Test1以及其他SQL语句。没有实际输入代码的原因是,我认为这不会增加任何问题。问题是SP在ManagementStudio中工作正常,但在VB.NET应用程序中却无法正常工作。如果我的SP中没有Truncate语句,那么它可以正常工作(包括delete和select以及update)。我看不出为什么截断在ManagementStudio中不起作用。如果你认为这段代码对这个问题真的有帮助的话,我很高兴发布它。非常感谢你的帮助——正如你所说的那样执行。