我想用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。
答案 0 :(得分: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()
之前提供所有参数的值