在Go中同时获取多个结果集和输出,但是如何首先扫描输出?

时间:2018-08-23 08:53:24

标签: sql-server go

我正在执行存储过程(使用go-mssqldb驱动程序),并且获得了多个带有结果的集合,然后选择输出。这是代码段:

query := "DECLARE @ErrorMessage nvarchar(4000);"+
    "EXEC [Schema].[Action] "+
    "@myInputParam=?,"+
    "@ErrorMessage = @ErrorMessage OUTPUT;"+
    "SELECT ErrorMessage = @ErrorMessage;"

ctx: ...

rows, err := r.DB.QueryxContext(ctx, query, "blabla")

通过这种方式,我可以使用rows.Next()rows.NextResultSet()的组合读取和扫描行中的结果集。

最后我Scan最后一组错误消息。

但是碰巧存储的可能只返回ErrorMessage集,这违反了我对代码的期望。

所以我需要始终先读取输出,然后,如果没有错误,请继续进行其他扫描的华尔兹和扫描。

我尝试过这种方式,希望能够填充var errorMessage:

QueryxContext(ctx, query, "blabla", sql.Named("ErrorMessage", sql.Out{Dest: &errorMessage}))

但是它不起作用,它向sql: statement expects 1 inputs; got 2投诉

EDIT1

这是我正在呼叫的存储空间

CREATE PROCEDURE [Schema].[Action]
    @myInputParam   VARCHAR(100),
    @ErrorMessage nvarchar(4000) OUTPUT
AS 
  BEGIN
      SELECT @Id = Id
      FROM ...
      WHERE Param = @myInputParam

      IF @Id IS NULL
        BEGIN
          SET @ErrorMessage = "some error";
        END
  END
GO

0 个答案:

没有答案