转换SQL BigInt的FreeTDS问题

时间:2013-09-14 21:50:06

标签: sql-server-2008 biginteger freetds bigint

我在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

知道为什么会这样吗?

0 个答案:

没有答案