BUG: Infinite Loop When UPDATE of a Cursor with WHERE CURRENT OFLast reviewed: August 4, 1997Article ID: Q172309  | 
	
	
 
 
The information in this article applies to:
 
 SYMPTOMSAn UPDATE of a cursor with a WHERE CURRENT OF clause may cause an infinite loop if the DECLARE CURSOR statement includes a WHERE clause and the underlying table does not have a primary key. The following scripts demonstrate this problem: 
    SET NOCOUNT ON
   GO
   DROP TABLE t
   GO
   CREATE TABLE t
   (
      c1 CHAR(10) NULL,
      c2 INT NOT NULL
   )
   GO
   INSERT t VALUES (NULL, 1)
   INSERT t VALUES (NULL, 2)
   DECLARE @c1 CHAR(10)
   DECLARE @c2 INT
   DECLARE myCursor CURSOR FOR
      SELECT c1, c2
         FROM t
         WHERE c2 = 1
   FOR UPDATE
   OPEN myCursor
   FETCH NEXT FROM myCursor INTO @c1, @c2
   WHILE (@@FETCH_STATUS <> -1)
   BEGIN
      IF (@@FETCH_STATUS <> -2)
      BEGIN
         SELECT
            '@@FETCH_STATUS' = CONVERT (VARCHAR(10), @@FETCH_STATUS),
            'C1' = CONVERT (VARCHAR(10), @c1),
            'C2' = CONVERT (VARCHAR(10), @c2)
         UPDATE t
            SET c1 = 'updated'
            WHERE CURRENT OF myCursor
      END
      FETCH NEXT FROM myCursor INTO @c1, @c2
   END
   CLOSE myCursor
   DEALLOCATE myCursor
WORKAROUNDYou can avoid this problem if you create the table with a primary key. The following scripts demonstrate the workaround for this problem: 
    CREATE TABLE t
   (
      c1 CHAR(10) NULL,
      c2 INT NOT NULL PRIMARY KEY
   )
   GO
STATUSMicrosoft has confirmed this to be a problem in Microsoft SQL Server version 6.5. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available. Keywords : kbbug6.50 SSrvTran_SQL kbprg kbusage Version : 6.5 Platform : WINDOWS Issue type : kbbug Solution Type : kbworkaround  | 
	
	================================================================================ 
 © 1998 Microsoft Corporation. All rights reserved. Terms of Use.  |