我正在执行存储过程(使用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