Sql server 2008 如何逃生?jdbc存储过程调用中的字符
我想用jdbc调用此存储过程:Sql server 2008 如何逃生?jdbc存储过程调用中的字符,sql-server-2008,stored-procedures,jdbc,escaping,Sql Server 2008,Stored Procedures,Jdbc,Escaping,我想用jdbc调用此存储过程: sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" JDBC认为?是参数的占位符。事实上,SP使用它输入表名。如何调用存储过程?我试过这个: CallableStatement call = jdbcConnection.prepareCall("call sp_msforeachtable(?)"); call.setString(1, "\"ALTER TABLE ? NOCHECK CONSTR
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。您说
?
应该是表名,所以在调用语句之前需要提供实际的表名。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();
或者你是想写这个:
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\u msforeachtable()
应该做什么,但我知道在调用executeUpdate()之前必须提供所有参数的值