我在Unix上有一个查询MSSQL数据库的程序。 DB将功能公开为存储过程,并带有BigINT输出参数。
在客户端,我们有一个C ++程序调用该sproc并尝试从输出参数中获取bigint。
我们看到的是数据已损坏。换句话说,从驱动程序返回BigInt的垃圾值。
更多信息:
客户:
Ubuntu 11.10 with freetds 0.64 TDS版本:0.8 与freetds 0.64链接的自定义C ++程序
服务器:
MSSQL 2008 存储过程,返回BigInt作为输出参数。
注:
我们尝试更改sproc以返回BigInt作为第一个结果集。如果我们尝试将其作为BigInt读取,我们将获得垃圾值。但是,如果我们尝试将其作为字符串读取,则会遇到正确的问题。
我为驱动程序启用了freetds日志记录,我发现驱动程序认为该值是NUMERIC而不是BigInt ....
token.c:526:处理结果标记。标记是交流(PARAM)
token.c:1526:处理结果。 type = 108(数字),varint_size 1
token.c:1547:处理结果。 column_size 17
token.c:1863:tds_get_data:第0列,类型108,varint size 1
但是,SQL Server SP定义正确地将输出参数定义为BigInt ...
ALTER PROCEDURE [dbo].[SomeSproc] (
@pParam1 bigint,
@pReturnCnt int = 5000, -- how many records to return
@pOutParam1 bigint = NULL OUTPUT
) AS
知道为什么会这样吗?