Как убежать? символ в вызовах хранимых процедур jdbc - PullRequest
0 голосов
/ 16 декабря 2009

Я хотел бы вызвать эту хранимую процедуру с помощью 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 Ответ

1 голос
/ 17 декабря 2009

Вы говорите, что ? должно быть для имени таблицы, поэтому вам необходимо указать фактическое имя таблицы перед вызовом 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()

...