MSSQL execute ne jette pas une erreur dans Java

J'essaie d'EXECUTER une string contre une database mssql via java, ça marche bien si le code sql est correct ou si je n'utilise pas EXECUTE. Mais si le code sql dans la string EXECUTE est faux, il ne montre aucune erreur.

Bien que les deux exemples fonctionnent bien dans le studio de gestion mssql (les deux montrent l'erreur attendue)

Un exemple simple serait:

TRAVAIL (montre l'erreur):

declare @testvar varchar(255); BEGIN create table dbo.test1 (testid numeric(10,2)); ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299); END 

PAS DE TRAVAIL (ne montre aucune erreur):

 declare @testvar varchar(255); BEGIN create table dbo.test1 (testid numeric(10,2)); SELECT @testvar = 'ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299);' EXECUTE (@testvar); END 

Des idées pour réparer celà?

Edit 1: (exemple de code Java simple, mais assez pour montrer ce comportement)

 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class QuickSqlExecuteExample { public static Connection getConnection(Ssortingng dbcon) throws SQLException { Connection conn = null; conn = DriverManager.getConnection(dbcon); conn.setAutoCommit(true); return conn; } public static void main(Ssortingng[] args) throws SQLException { Ssortingng dbcon="jdbc:sqlserver://[HOST]:[PORT];databaseName=[DBNAME];user=[USER];password=[PASS];"; Connection con = getConnection(dbcon); Ssortingng qrySsortingng = "declare @testvar varchar(255);" +"\nBEGIN" +"\n create table dbo.test1 (testid numeric(10,2));" +"\n ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299)" //+"\n SELECT @testvar = 'ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299);';" //+"\n EXECUTE (@testvar);" +"\nEND"; Statement select = con.createStatement(); select.execute(qrySsortingng); } } 

Pilotes essayés: Microsoft SQL Server JDBC Driver 2.0.1803.100 / 4.0.2206.100

Si je lis correctement, vous ignorez la valeur de return. Le code ne sait pas s'il a été exécuté avec succès. Votre "travail" exemple jette juste l'erreur brute, mais dans le résultat "ne fonctionne pas" il est ignoré. Essayer

 DECLARE @retstat int; EXECUTE @retstat = ALTER TABLE dbo.test1 ALTER COLUMN testid numeric(15,299); 

Référence: http://technet.microsoft.com/en-us/library/ms188332.aspx (voir les sections D et E)