[freetds] SQL_NO_DATA or SQL_SUCCESS

Peter Deacon peterd at iea-software.com
Wed Feb 27 12:11:42 EST 2008


On Wed, 27 Feb 2008, James K. Lowden wrote:

>> Mmmm... as said if nobody complains I would commit... so I complain :)

>> Yes, it seems that DELETE/UPDATE with no rows produce SQL_NO_DATA!!
>> However I must say that as documented only DELETE/UPDATE with no rows
>> should return SQL_NO_DATA. The situaction is complicated by the fact
>> that only mssql (no Sybase) return proper informations to detect
>> UPDATE/DELETE execution!

> http://msdn2.microsoft.com/en-us/library/ms715424(VS.85).aspx
> I'm sure you've read the above confusing page more than once.  It says
> that whether SQLExecute returns SQL_NO_DATA or SQL_SUCCESS depends on:

> 1.  Whether the *application* is 2.x or 3.x.
> 2.  Whether the "searched update or delete" was part of a batch.
> 3.  Whether any rows were affected.

> According to the documentation, then, SQLExecute returns SQL_NO_DATA only
> if

> 1.  a "searched update or delete" is not part of a batch -- or, I presume,
> a stored procedure -- and
> 2.  is issued by a 3.x application, and
> 3.  affected zero rows.

FWIW I didn't realize version mattered.  I was able to reproduce the 
SQL_NO_DATA by capturing a trace from isqlw/sql2000.

isqlw           1298-674	EXIT  SQLExecDirectW  with return code 100 
(SQL_NO_DATA_FOUND)
 		HSTMT               014F1C00
 		WCHAR *             0x0016C0B8 [      -3] "UPDATE Configs 
SET ConfigID = 4343 WHERE ConfigID = 43240324\ d\ a\ 0"
 		SDWORD                    -3

> (I do not know what a "searched update" is.  I guess it means one with a
> WHERE clause.  If I issue "UPDATE tablename SET columname = 0" on a table
> with zero rows, it affects zero rows.  What should the driver return
> then?)

Yea, searched updates are exactly that.

take care,
Peter



More information about the FreeTDS mailing list