2009-12-16 56 views
0

我想调用这个存储过程使用JDBC:如何逃生?字符JDBC调用存储过程

sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 

JDBC认为?是争论的占位符。实际上它被SP用来输入表名。我怎样才能调用存储过程?我试过这个:

CallableStatement call = jdbcConnection.prepareCall("call sp_msforeachtable(?)"); 
call.setString(1, "\"ALTER TABLE ? NOCHECK CONSTRAINT all\""); 
call.executeUpdate(); 

我在'@ P0'附近得到一个语法错误。我猜'@ P0'是?我怎样称呼这个SP?我正在使用SQL Server 2008 BTW。

回答

1

你说?应该是表名,所以你需要在调用Statement.executeUpdate()之前提供一个实际的表名。此时,JDBC驱动程序会告诉数据库实际运行该语句,因此显然需要绑定所有参数。

也许你的意思是这样写:

CallableStatement call = jdbcConnection.prepareCall("call sp_msforeachtable(?)"); 
call.setString(1, "AnActualTableName"); 
call.executeUpdate(); 

也许你的意思是这样写:

CallableStatement call = jdbcConnection.prepareCall("call sp_msforeachtable(\"ALTER TABLE ? NOCHECK CONSTRAINT all\")"); 
call.setString(1, "AnActualTableName"); 
call.executeUpdate(); 

我不知道到底是什么sp_msforeachtable()是应该做的,但我知道在致电executeUpdate()

之前,您必须提供所有参数的值