Sql server 存储过程中截断表时出错
我有一个非常奇怪的情况,我试图从网上研究答案,但没有结果。我正在使用SQLServer2008R2 我创建了一个存储过程,其中包含一个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,因为它不存在或您不存在 没有权限 与数据库的连接在应用程序中设置正确,更奇怪的是,我有
TRUNCATE TABLE
语句和其他T-SQL语句
从SQLServerManagementStudio运行时,存储过程运行时不会出错
当从Windows窗体应用程序(用VB.Net和.Net Framework 4编写)运行时,我收到了错误消息
找不到对象tbl_Test1,因为它不存在或您不存在
没有权限
与数据库的连接在应用程序中设置正确,更奇怪的是,我有其他存储过程是以完全相同的方式创建的,它们有自己的TRUNCATE TABLE
语句,并且这些语句仍然运行正常
对用户\u角色
的存储过程具有执行权限,调用应用程序正在以身份登录该角色
表tbl_Test1
确实存在
我尝试过几件事,但由于这样做,我对整个情况变得更加困惑
Select*from tbl_Test1
放在TRUNCATE
之前,则存储过程可以工作TRUNCATE
语句之前,我重新编码并从tbl_Test1中选择@Count=Count(*),这失败了,与上面的错误相同,说明tbl_Test1
不存在或没有权限截断表
您需要显式地授予该权限()或在存储过程中使用
executeas
。仅对存储过程授予EXEC
权限是不够的。当不允许查看代码时,我们在调试方面做得很差。存储过程中的所有代码都是TRUNCATE表tbl\U Test1以及其他SQL语句。没有实际输入代码的原因是,我认为这不会增加任何问题。问题是SP在ManagementStudio中工作正常,但在VB.NET应用程序中却无法正常工作。如果我的SP中没有Truncate语句,那么它可以正常工作(包括delete和select以及update)。我看不出为什么截断在ManagementStudio中不起作用。如果你认为这段代码对这个问题真的有帮助的话,我很高兴发布它。非常感谢你的帮助——正如你所说的那样执行。