通过远程删除存储过程



我正在使用JUnit通过远程创建和测试一个存储过程,我的用户名是test,这是我的代码,

String sql = "create procedure test.firstProc3 AS select GETDATE()";
cursor.execute(sql);
cursor.executeQuery("firstProc3");

ANd放弃程序:

String dropSQL = "DROP PROCEDURE test.firstProc3";
cursor.execute(dropSQL);

由于Drop过程不起作用,我无法第二次运行同一SP(新会话)我的错误是:

数据库中已存在名为"firstProc3"的对象。

当我在服务器端提供sp_help时,表中有一行的值为

firstProc3测试存储过程

然而,当我付出DROP PROCEDURE test.firstPoc3在查询分析器中,该行将从表中删除。

试图通过Junit进行同样的操作会有什么问题?

是否有要设置的权限?

PS-用户测试已启用db_ddladmin。

我使用以下方法最终解决了问题:

declare @object_id int
select @object_id = object_id('test.firstProc5')
EXEC sp_MSdrop_object @object_id
GO

这也将从表中删除数据。我能够成功地多次运行测试用例!

谢谢你的帮助:)

我提到的链接在这里,希望它能帮助到某人:

http://www.mssqlcity.com/Articles/Undoc/SQL2000UndocSP.htm

根据错误消息,我怀疑这是权限问题。当您尝试删除时,您的游标对象似乎正在再次运行create,或者在再次运行单元测试之前从未真正删除proc,或者测试在某种程度上运行不符合逻辑顺序。你能实例化一个新的游标对象并尝试删除它吗?或者使用探查器或一些调试输出来验证针对数据库运行的SQL吗?

除此之外,我很想看看更改SQL命令以检查proc是否存在是否会使错误消失(这不是正确的答案):

if object_id('test.firstProc3') is null begin
    -- Dynamic SQL because create must be first in a batch
    exec ('create procedure test.firstProc3 as select getdate()') 
end
if object_id('test.firstProc3') is not null begin
    drop procedure test.firstProc3
end

也许是一些小问题,也许事实并非如此,但您是否尝试在drop语句中使用转义?

类似的东西

drop procedure [test].[firstProc3]

我记得当我从c代码调用一个drop表时,我遇到了一个问题。。。

最新更新