Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何逃生?jdbc存储过程调用中的字符_Sql Server 2008_Stored Procedures_Jdbc_Escaping - Fatal编程技术网

Sql server 2008 如何逃生?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

我想用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。

您说
应该是表名,所以在调用
语句之前需要提供实际的表名。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()之前必须提供所有参数的值