Microsoft KB Archive/147674

{|
 * width="100%"|

BUG: Cursor Open 533 Error on UNION if MAX or MIN in Subquery

 * }

Q147674

-

The information in this article applies to:


 * Microsoft SQL Server version 6.0

-

BUG# NT: 13504 (6.00)

SYMPTOMS
Errors can occur when you open a server cursor on a UNION query where the unioned SELECTs contain correlated subqueries which contain MIN or MAX. Db-library clients see the following errors:

DB-Library error 10008: Possible network error: Bad token from SQL

Server: Datastream processing out of sync.

Msg 533, Level 20, State 4

Can't find a range table entry for range 4.

DB-Library Process Dead - Connection Broken

ODBC clients see the following single error if they call SQLError:

szSqlState = "S1000", *pfNativeError = 0,

szErrorMsg="[Microsoft][ODBC SQL Server Driver]

Unknown token received from SQL Server"

The problem happens on all types of server cursors (Dynamic, Keyset, Static, Forward Only).

STATUS
Microsoft has confirmed this to be a problem in the Microsoft SQL Server version 6.00.

This problem no longer occurs in version 6.50.

WORKAROUND
Do not use a server cursor to process the command. Alternatively, perform the two UNIONed SELECTs into temporary tables and then perform the union between the temporary tables. For example, take:

  select distinct t1.type from titles t1  where t1.type in ( select max(t2.type)                                  from titles t2                                  where t1.pub_id != t2.pub_id ) union select distinct t1.type from titles t1  where t1.type in ( select max(t2.type)                                  from titles t2                                  where t1.pub_id != t2.pub_id ) and change it to:

  select distinct t1.type into #temp1 from titles t1  where t1.type in ( select max(t2.type)                                  from titles t2                                  where t1.pub_id != t2.pub_id ) go  select distinct t1.type into #temp2 from titles t1  where t1.type in ( select max(t2.type)                                  from titles t2                                  where t1.pub_id != t2.pub_id ) go  select * from #temp1 union select * from #temp2 Additional query words: sql6 cursor tsql

Keywords : kbprogramming

Issue type : kbbug

Technology : kbSQLServSearch kbAudDeveloper kbSQLServ600