1

我有一个在 Unix 上查询 MSSQL 数据库的程序。DB 将功能公开为带有 BigINT 输出参数的存储过程。

在客户端,我们有一个 C++ 程序正在调用该存储过程并尝试从输出参数中获取 bigint。

我们看到的是数据正在损坏。换句话说,BigInt 的垃圾值正在从驱动程序返回。

更多信息:

客户:

Ubuntu 11.10 with freetds 0.64 TDS 版本:0.8 与 freetds 0.64 链接的自定义 C++ 程序

服务器:

将 BigInt 作为输出参数返回的 MSSQL 2008 存储过程。

笔记:

我们尝试更改存储过程以将 BigInt 作为第一个结果集返回。如果我们尝试将其读取为 BigInt,则会得到垃圾值。但是,如果我们尝试将其读取为字符串,它就会正确地出现。

我为驱动程序启用了 freetds 日志记录,我看到驱动程序认为该值是 NUMERIC,而不是 BigInt...。

token.c:526:处理结果令牌。标记是 ac(PARAM)

token.c:1526:处理结果。类型 = 108(数字),varint_size 1

token.c:1547:处理结果。列大小 17

token.c:1863:tds_get_data:第 0 列,类型 108,varint 大小 1

但是,SQL 服务器 SP 定义正确地将输出参数定义为 BigInt...

    ALTER PROCEDURE [dbo].[SomeSproc] (
    @pParam1        bigint,
    @pReturnCnt     int = 5000,  -- how many records to return
    @pOutParam1    bigint = NULL OUTPUT
) AS

知道为什么会这样吗?

4

0 回答 0