[freetds] FreeTDS problems with converting SQL BigInt

Feroze Daud khichdo at yahoo.com
Sun Sep 15 11:58:28 EDT 2013


I have a program on Unix that is querying a MSSQL Database. The DB exposes functionality as a Stored procedure, with a BigINT output parameter.
On the client side, we have a C++ program that is calling that sproc and trying to get the bigint from the output parameter.
What we are seeing is that the data is getting corrupted. In other words, garbage value for the BigInt is being returned from the driver.
More Information:
Client:
Ubuntu 11.10 with freetds 0.64 TDS Version: 0.8 Custom C++ program linked with freetds 0.64
Server:
MSSQL 2008 Stored Procedure that returns a BigInt as an output parameter.
NOTE:
We tried changing the sproc to return the BigInt as the first resultset. If we try to read it as a BigInt, we get the garbage value. However, if we try to read it as a string, it comes across correctly.
I enabled freetds logging for the driver, and I see that the driver is thinking that the value is a NUMERIC, not a BigInt....
token.c:526:processing result tokens. marker is ac(PARAM)
>token.c:1526:processing result. type = 108(numeric), varint_size 1
>token.c:1547:processing result. column_size 17
>token.c:1863:tds_get_data: column 0, type 108, varint size 1
However, the SQL server SP definition correctly defines the output parameter as a BigInt...
ALTERPROCEDURE[dbo].[SomeSproc](@pParam1        bigint, at pReturnCnt     int =5000,-- how many records to return at pOutParam1    bigint =NULLOUTPUT )AS
Any idea why this is happening?
Thanks,
feroze.


More information about the FreeTDS mailing list