2009-12-16 6 views
0

Je voudrais appeler cette procédure stockée avec jdbc:Comment échapper? caractère appels de procédure stockée jdbc

sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 

JDBC pense que le? est un espace réservé pour un argument. En fait, il est utilisé par le SP pour mettre dans le nom de la table. Comment puis-je appeler la procédure stockée? J'ai essayé ceci:

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

et j'obtiens une erreur de syntaxe près de '@ P0'. Je suppose que '@ P0' est le? Comment puis-je appeler ce SP? J'utilise SQL Server 2008 BTW.

Répondre

1

Vous dites que le ? est censé être pour un nom de table, vous devez donc fournir un nom de table réel avant d'appeler Statement.executeUpdate(). À ce stade, le pilote JDBC dira à la base de données d'exécuter réellement l'instruction, donc évidemment tous les paramètres doivent être liés.

Peut-être que vous vouliez écrire ceci:

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

ou peut-être que vous vouliez écrire ceci:

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

Je ne sais pas exactement ce que sp_msforeachtable() est censé faire, mais je ne sais que vous devez fournir des valeurs pour tous les paramètres avant d'appeler executeUpdate()

Questions connexes