我有一个在 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
知道为什么会这样吗?