2009-07-21 5 views
1

Lorsque vous appelez cette procédure MS-SQL stocké:Problème appel d'une procédure MS SQL stockée avec paramètre OUT en utilisant Groovy

CREATE PROCEDURE [dbo].[AddUser] 

@networkID varchar(512), 
@id uniqueidentifier OUTPUT 
.... 

Avec ce code Groovy:

networkAliasID = 'aschoewe_test' 
sql.call("{call AddUser(?, ${Sql.VARCHAR}) }", [networkAliasID]) { s -> 
    println "userID: ${s}" 
} 

Je reçois cette erreur:

java.sql.SQLException: Incorrect syntax near '.'. 

C'est parce qu'il n'aime pas le 'Sql.' une partie du code (même si tous les exemples que j'ai vus le font comme ça). Si je change le code à:

networkAliasID = 'aschoewe_test' 
String userID = null 
sql.call("{call AddUser(?, ?) }", [networkAliasID, userID]) { s -> 
    println "userID: ${s}" 
    println "userID: ${userID}" 
} 

Le code s'exécute, mais je ne peux pas obtenir le nouvel ID utilisateur. Les deux 's' et 'userID' sont null lorsque le code a fini d'exécuter. Est-ce que je fais quelque chose qui ne va pas systématiquement? Est-ce un problème avec MSSQL? Est-ce un problème avec le type de retour étant UNIQUEIDENTIFIER? J'utilise les pilotes JTDS et la documentation montre que c'est le type JDBC equiavalent qui est VARCHAR.

Toute aide est appréciée,

Andrew

Répondre

1

Le type du paramètre de sortie devrait aller dans la liste des paramètres, pas la chaîne de requête, comme suit:

networkAliasID = 'aschoewe_test' 
sql.call("{call AddUser(?, ?) }", [networkAliasID, Sql.VARCHAR]) { s -> 
    println "userID: ${s}" 
} 
Questions connexes