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...
ALTER PROCEDURE [dbo].[SomeSproc] (
@pParam1 bigint,
@pReturnCnt int = 5000, -- how many records to return
@pOutParam1 bigint = NULL OUTPUT
) AS
Any idea why this is happening?