代码之家  ›  专栏  ›  技术社区  ›  anschoewe

使用Groovy调用带有OUT参数的mssql存储过程时出现问题

  •  1
  • anschoewe  · 技术社区  · 16 年前

    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}" 
    } 
    

    代码已执行,但我无法获取新的用户标识。代码执行完毕后,“s”和“userID”都为空。

    我是不是做错了什么?这是MSSQL的问题吗?返回类型是UNIQUEIDENTIFIER是否有问题?使用jtbc的JTDS文档显示了jtbc的类型。

    安得烈

    1 回复  |  直到 16 年前
        1
  •  1
  •   Ben Williams    16 年前

    输出参数的类型应该出现在参数列表中,而不是查询字符串中,如下所示:

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