FIX: Error Message: "Insufficient key column information for updating" Occurs in SQL Server 2000 SP3 (814893)



The information in this article applies to:

  • Microsoft SQL Server 2000 (all editions) SP3

CPR - SQL 2000 - Hotfix in SP4
BUG #: 364087 (SHILOH_BUGS)

SYMPTOMS

After you apply one of the following
  • The hotfix described in

    321541 FIX: SQL Server Might Return Incorrect Results When You Use an Outer Join and a View

    on a computer that is running Microsoft SQL Server 2000 Service Pack 2 (SP2).
  • The security hotfix described in Microsoft Security Bulletin MS02-061 for Microsoft SQL Server 2000 SP2.
  • Microsoft SQL Server 2000 Service Pack 3 (SP3).
you might receive the following error message:
Insufficient key column information for updating or refreshing.

RESOLUTION

Service pack information

To resolve this problem, obtain the latest service pack for Microsoft SQL Server 2000. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

290211 How to obtain the latest SQL Server 2000 service pack

Hotfix information

The English version of this hotfix has the file attributes (or later file attributes) that are listed in the following table. The dates and times for these files are listed in coordinated universal time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time tool in Control Panel.
   Date         Time   Version        Size              File name
   ------------------------------------------------------------------
   08-Feb-2003  05:43                    786,432 bytes  Distmdl.ldf
   08-Feb-2003  05:43                  2,359,296 bytes  Distmdl.mdf
   01-Feb-2003  00:32  2000.80.763.0   1,557,052 bytes  Dtsui.dll        
   30-Jan-2003  05:18                    746,470 bytes  Instdist.sql
   08-Feb-2003  06:40  2000.80.765.0      90,692 bytes  Msgprox.dll      
   08-Feb-2003  03:53                  1,065,895 bytes  Replmerg.sql
   08-Feb-2003  06:40  2000.80.765.0     221,768 bytes  Replprov.dll     
   08-Feb-2003  06:40  2000.80.765.0     307,784 bytes  Replrec.dll      
   30-Jan-2003  05:18                  1,084,318 bytes  Replsys.sql
   08-Feb-2003  06:40  2000.80.765.0     176,696 bytes  Sqlmap70.dll     
   08-Feb-2003  06:40  2000.80.765.0      57,920 bytes  Sqlrepss.dll     
   15-Feb-2003  02:52  2000.80.769.0   7,512,145 bytes  Sqlservr.exe     
   15-Feb-2003  02:52                 12,715,008 bytes  Sqlservr.pdb
   08-Feb-2003  06:40  2000.80.765.0      45,644 bytes  Sqlvdi.dll       
   08-Feb-2003  06:40  2000.80.765.0      82,492 bytes  Ssnetlib.dll     
				
Note Because of file dependencies, the most recent hotfix or feature that contains the files may also contain additional files.

STATUS

Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.This problem was first corrected in Microsoft SQL Server 2000 Service Pack 4.

MORE INFORMATION

The hotfix discussed in this article regresses the fix that is discussed in the following Microsoft Knowledge Base article:

321541 FIX: SQL Server Might Return Incorrect Results When You Use an Outer Join and a View



Note To make the hotfix discussed in this article operational, you must enable trace flag -T220, and restart SQL Server.

To enable the trace flag, follow these steps:
  1. Open SQL Enterprise Manager on the server.
  2. Click to select the server that is experiencing the problem.
  3. Right-click the server, and then click Properties.
  4. On the General tab, click Startup Parameters.
  5. In the Startup Parameters dialog box, type -T220, and then click Add.
  6. Click OK.
  7. Stop, and then restart the Mssqlserver service to restart SQL Server.

An example of the problem and what the trace flag -T220 does follows.
The example uses two sample tables named Test_Table1 and Test_Table2. Consider the following tables and view:
CREATE TABLE TEST_TABLE1 ( 
[CODE] [int] NOT NULL PRIMARY KEY, 
[DESCRIPTION] [varchar] (50)) 

CREATE TABLE TEST_TABLE2 ( 
[CODE] [int] NOT NULL PRIMARY KEY, 
[DESCRIPTION] [varchar] (50)) 
go
CREATE VIEW dbo.TEST_VIEW 
AS 
SELECT CODE, 
UPPER(DESCRIPTION) AS DESCRIPTION, 
ISNULL(UPPER(DESCRIPTION), 'DEFAULT') DESCRIPTION_DEF 
FROM dbo.TEST_TABLE2 
go
Now, run this code:
DECLARE cc CURSOR FOR 
SELECT TEST_TABLE1.CODE, TEST_VIEW.DESCRIPTION, TEST_VIEW.DESCRIPTION_DEF 
FROM TEST_TABLE1 LEFT OUTER JOIN TEST_VIEW 
ON TEST_VIEW.CODE = TEST_TABLE1.CODE 
FOR UPDATE
  • For SQL Server 2000 versions before SQL Server 2000 SP2, with the security hotfix discussed in Microsoft Security Bulletin MS02-061 installed, the code runs successfully.
  • For all SQL Server 2000 versions after SQL Server 2000 SP2, with the security hotfix discussed in Microsoft Security Bulletin MS02-061 installed, the code does not run successfully.
  • For SQL Server 2000 versions 8.00.0769 and later, when you use trace flag -T220 or DBCC traceon (220), the code runs successfully.
Also note that the SELECT statement does not give the same result.
  • For SQL Server 2000 versions before SQL Server 2000 SP2, with the security hotfix discussed in Microsoft Security Bulletin MS02-061 installed, or post 8.00.0769 with trace flag 220, the result is similar to:

    CODE        DESCRIPTION                                        DESCRIPTION_DEF                                    
    ----------- -------------------------------------------------- -------------------------------------------------- 
    1           NULL                                               DEFAULT
    
    
  • For SQL Server 2000 versions after SQL Server 2000 SP2, with the security hotfix discussed in Microsoft Security Bulletin MS02-061installed, the result is similar to:

    CODE        DESCRIPTION                                        DESCRIPTION_DEF                                    
    ----------- -------------------------------------------------- -------------------------------------------------- 
    1           NULL                                               NULL
    

Modification Type:MinorLast Reviewed:9/27/2005
Keywords:kbHotfixServer kbQFE kbQFE kbSQLServ2000preSP4fix kbfix kbbug KB814893