调用此MS-SQL存储过程时:
CREATE PROCEDURE [dbo].[AddUser]
@networkID varchar(512),
@id uniqueidentifier OUTPUT
....
使用这个Groovy代码:
networkAliasID = 'aschoewe_test'
sql.call("{call AddUser(?, ${Sql.VARCHAR}) }", [networkAliasID]) { s ->
println "userID: ${s}"
}
我收到此错误:
java.sql.SQLException: Incorrect syntax near '.'.
这是因为它不喜欢'Sql'。代码的一部分(尽管我见过的所有例子都是这样的)。如果我将代码更改为:
networkAliasID = 'aschoewe_test'
String userID = null
sql.call("{call AddUser(?, ?) }", [networkAliasID, userID]) { s ->
println "userID: ${s}"
println "userID: ${userID}"
}
代码执行,但我无法获取新的用户ID。代码完成执行时,'s'和'userID'都为null。
我做了一些系统错误的事吗?这是MSSQL的问题吗?这是返回类型为UNIQUEIDENTIFIER的问题吗?我正在使用JTDS驱动程序,文档显示它的JDBC等价类型是VARCHAR。
感谢任何帮助,
安德鲁
答案 0 :(得分:1)
输出参数的类型应该放在参数列表中,而不是查询字符串,如下所示:
networkAliasID = 'aschoewe_test'
sql.call("{call AddUser(?, ?) }", [networkAliasID, Sql.VARCHAR]) { s ->
println "userID: ${s}"
}