Skip to Content.
Sympa Menu

freetds - RE: [freetds] Still can't process stored procedure results.

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "Rogers, Tom" <tom.rogers AT ccur.com>
  • To: 'FreeTDS Development Group' <freetds AT lists.ibiblio.org>
  • Subject: RE: [freetds] Still can't process stored procedure results.
  • Date: Mon, 18 Aug 2003 09:29:59 -0400



When you say that you cannot get the results of the stored procedure when
they are printed to the screen, do you mean exactly that?

There are three ways that I know of to get data back from an MS stored
procedure:

1. Via Result Set - To do this your SP has to have a SELECT statement in it
that returns records.
2. Output Parameters - For these, you need actual parameters to the SP that
are designated as OUTPUT, and you have to bind variables to them client
side. Than, within your SP you need to SET or SELECT a value into these
params. This didn't work with previous versions of FreeTDS against MS SQL
dbs.
3. Have your SP raise an error (RAISERROR T-SQL statement) and use the
diagnostic records interface of FreeTDS to get the information. This is
typically only useful for error handling.

Now, if you are using PRINT from our SP, I am not sure how you can get the
results.

Thomas Rogers
System Engineer
Concurrent Computer Corporation
phone: 215.712.7422 x7261
mailto:tomr AT ccur.com

-----Original Message-----
From: James Vanns [mailto:jimv AT canterbury.ac.uk]
Sent: Monday, August 18, 2003 9:12 AM
To: FreeTDS Development Group
Subject: [freetds] Still can't process stored procedure results.

OK, I understand that M$ SQL Server (2000) outputs the results of stored
procedures in two different ways depending on how the sproc is written.
It can return a result set or print out the fields directly (to stdout
if you like!).

I can retrieve (using the TDS library) the results of a sproc if it is a
result-set. However I cannot if it is printed to the 'screen'. I am
switching on the directives below:

<snip>
results = socket->res_info;

if (results)
switch (result_type) {
case TDS_ROWFMT_RESULT:
case TDS_COMPUTEFMT_RESULT:
for (int i = 0 ; i < results->num_cols ; i++)
headers.push_back (results->columns[i]->column_name);

break;
case TDS_ROW_RESULT:
case TDS_COMPUTE_RESULT:
while (tds_process_row_tokens (socket, &row_type, &id) ==
TDS_SUCCEED) {
vector<string> row;
for (int i = 0 ; i < results->num_cols ; i++)
row.push_back (field_as_string (i));

result_set.push_back (row);
}
break;
}

</snip>

I am using the latest FreeTDS source and protocol version 8. Any ideas
on how I can see the results of a sproc that simply prints its output?

Many thanks.

James Vanns

--
James Vanns BSc (Hons) MCP
Linux Systems Administrator
Senior Software Engineer (Linux / C & C++)
Canterbury Christ Church University College
Public Key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x24045370

_______________________________________________
FreeTDS mailing list
FreeTDS AT lists.ibiblio.org
http://lists.ibiblio.org/mailman/listinfo/freetds




Archive powered by MHonArc 2.6.24.

Top of Page