Update: Zeilen unerwartet gelöscht wenn Sie eine verteilte Abfrage zum Löschen oder eine Tabelle des Verbindungsservers zu aktualisieren ausführen

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 825043
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
# Fehler: 469673 (SQL Server 8.0)
Problembeschreibung
Wenn Sie eine verteilte Abfrage, die einen vierteiligen Name ausführen, löschen oder Aktualisieren von Zeilen auf einem Verbindungsserver Tabelle in einer Microsoft SQL Server 2000-Datenbank verwendet, werden die Zeilen in der Tabelle des Verbindungsservers, die nicht die Verknüpfungsbedingung erfüllen auch gelöscht. Dieses Problem kann auftreten, wenn die Transact-SQL DELETE-Anweisung oder die UPDATE Transact-SQL-Anweisung in der verteilten Abfrage eine Verknüpfung umfasst und nicht-ANSI-Syntax verwendet. Dieses Problem kann nicht auftreten, wenn Sie eine verteilte Abfrage ausführen, die dieselbe Instanz von SQL Server als Verbindungsserver in der verteilten Abfrage verwendet.
Lösung

Informationen zu Service Packs

Installieren Sie das neueste Service Pack für Microsoft SQL Server 2000, um dieses Problem zu beheben. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
290211So erhalten Sie das neueste Service Pack für SQL Server 2000

Hotfix-Informationen

Die englische Version dieses Hotfixes weist die Dateiattribute (oder höher Dateiattribute), die in der folgenden Tabelle aufgelistet werden. Die Datums- und Uhrzeitangaben für diese Dateien sind in Coordinated Universal Time (UTC) angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln verwenden Sie die Registerkarte Zeitzone des Tools „ Datum und Uhrzeit in der Systemsteuerung.
   Date         Time   Version            Size    File name   ---------------------------------------------------------------------   31-May-2003  06:15  2000.80.818.0      78,400  Console.exe         24-Jun-2003  12:31  2000.80.818.0      33,340  Dbmslpcn.dll        24-Apr-2003  13:42                    786,432  Distmdl.ldf   24-Apr-2003  13:42                  2,359,296  Distmdl.mdf   29-Jan-2003  13:25                        180  Drop_repl_hotfix.sql   23-Jun-2003  10:10  2000.80.837.0   1,557,052  Dtsui.dll           23-Jun-2003  10:10  2000.80.837.0     639,552  Dtswiz.dll          23-Apr-2003  14:21                    747,927  Instdist.sql   02-May-2003  13:26                      1,581  Inst_repl_hotfix.sql   07-Feb-2003  18:10  2000.80.765.0      90,692  Msgprox.dll         31-Mar-2003  13:37                      1,873  Odsole.sql   04-Apr-2003  13:16  2000.80.800.0      62,024  Odsole70.dll        07-May-2003  08:11  2000.80.819.0      25,144  Opends60.dll        02-Apr-2003  09:18  2000.80.796.0      57,904  Osql.exe            02-Apr-2003  10:45  2000.80.797.0     279,104  Pfutil80.dll        22-May-2003  10:27                     19,195  Qfe469571.sql   11-Jul-2003  04:34                  1,084,147  Replmerg.sql   04-Apr-2003  09:23  2000.80.798.0     221,768  Replprov.dll        07-Feb-2003  18:10  2000.80.765.0     307,784  Replrec.dll         11-Jul-2003  04:26                  1,085,925  Replsys.sql   31-May-2003  12:31  2000.80.818.0     492,096  Semobj.dll          31-May-2003  05:57  2000.80.818.0     172,032  Semobj.rll   28-May-2003  11:59                    115,944  Sp3_serv_uni.sql   31-May-2003  12:31  2000.80.818.0   4,215,360  Sqldmo.dll          07-Apr-2003  05:14                     25,172  Sqldumper.exe       19-Mar-2003  05:50  2000.80.789.0      28,672  Sqlevn70.rll   01-Jul-2003  11:48  2000.80.834.0     180,736  Sqlmap70.dll        07-Feb-2003  18:10  2000.80.765.0      57,920  Sqlrepss.dll        21-Jul-2003  07:24  2000.80.842.0   7,553,105  Sqlservr.exe        07-Feb-2003  18:10  2000.80.765.0      45,644  Sqlvdi.dll          24-Jun-2003  12:31  2000.80.818.0      33,340  Ssmslpcn.dll        31-May-2003  12:31  2000.80.818.0      82,492  Ssnetlib.dll        31-May-2003  12:31  2000.80.818.0      25,148  Ssnmpn70.dll        31-May-2003  12:31  2000.80.818.0     158,240  Svrnetcn.dll        31-May-2003  06:29  2000.80.818.0      76,416  Svrnetcn.exe        30-Apr-2003  11:22  2000.80.816.0      45,132  Ums.dll             01-Jul-2003  11:49  2000.80.834.0      98,816  Xpweb70.dll   
Hinweis: Aufgrund von Dateiabhängigkeiten enthält das aktuellste Update oder Feature, das diese Dateien enthält, möglicherweise auch weitere Dateien.
Abhilfe
Gehen Sie folgendermaßen vor um um dieses Problem zu beheben:
  1. Erstellen Sie einen eindeutigen Index für die Tabelle des Verbindungsservers, der die verteilte Abfrage löscht oder Updates.
  2. Ersetzen Sie die non-ANSI-Syntax der Transact-SQL DELETE-Anweisung oder der UPDATE-Transact-SQL-Anweisung in der verteilten Abfrage, durch ANSI-Syntax.
Im folgende Beispiel wird die Problem-Bedingung neu erstellt:
  1. Erstellen Sie eine Testdatenbank auf Ihre Instanz von SQL Server, die als Quellserver verwendet werden.
  2. Hinzufügen eines Computers, auf dem SQL Server als Verbindungsserver zu Ihrer Instanz von SQL Server ausgeführt wird.
  3. Führen Sie auf dem Computer, auf dem SQL Server ausgeführt wird und die als Verbindungsserver hinzugefügt wurde, das folgende Transact-SQL-Skript zum Erstellen von zwei Tabellen:
    CREATE TABLE ct_batch ([BAT_PKEY] int NOT NULL ,[BTYP_KEY] int NOT NULL ,[BAT_START_DT] datetime NULL,[BAT_END_DT] datetime NULL,[BAT_STATUS] varchar(50) NULL,[BAT_DO_WORK_FLAG] int NULL)CREATE TABLE ct_batch_element ( [BAT_KEY] int NOT NULL ,[BECC_KEY] int NOT NULL ,[BE_LINK_KEY] int NOT NULL ,[BE_CUST_STRING] varchar(20) NULL,[BE_CUST_VALUE] float NULL)GO
  4. Führen Sie die Testdaten in den Tabellen aufgefüllt, die Sie in Schritt 3 erstellt haben das folgende Transact-SQL-Skript:
    DECLARE @count intSET @count = 0WHILE @count < 100BEGININSERT INTO ct_batch VALUES (@count,2,GETDATE(),GETDATE(),'closed',0)INSERT INTO ct_batch_element VALUES (100,1,@count,null,null)SET @count = @count + 1ENDINSERT INTO ct_batch VALUES (100,2,GETDATE(),GETDATE(),'current',0)GO
  5. Führen Sie auf Quelle SQL Server-Datenbank das folgende Transact-SQL-Skript:
    DELETE Linked Server Name.pubs.dbo.ct_batch_element FROM Linked Server Name.pubs.dbo.ct_batch_element A JOIN Linked Server Name.pubs.dbo.ct_batch BON A.bat_key=B.bat_pkey WHERE A.be_link_key = 1
    Hinweis 1 hundert Zeilen möglicherweise statt nur eine Zeile gelöscht.
Gehen Sie folgendermaßen vor, um das Problem zu umgehen, das im vorherigen Beispiel auftritt,:
  1. Führen Sie auf dem Computer, auf dem SQL Server ausgeführt wird und die als Verbindungsserver hinzugefügt wurde, das folgende Transact-SQL-Skript um die Testdaten neu aufzufüllen, das gelöscht wurde:
    DECLARE @count intSET @count = 0WHILE @count < 100BEGININSERT INTO ct_batch VALUES (@count,2,GETDATE(),GETDATE(),'closed',0)INSERT INTO ct_batch_element VALUES (100,1,@count,null,null)SET @count = @count + 1ENDINSERT INTO ct_batch VALUES (100,2,GETDATE(),GETDATE(),'current',0)GO
  2. Führen Sie auf dem Computer, auf dem SQL Server ausgeführt wird und die als Verbindungsserver hinzugefügt wurde, das folgende Transact-SQL-Skript:
    CREATE UNIQUE INDEX idx1 ON ct_batch_element(be_link_key)
  3. Führen Sie auf Quelle SQL Server-Datenbank das folgende Transact-SQL-Skript:
    DELETE Linked Server Name.pubs.dbo.ct_batch_element FROM Linked Server Name.pubs.dbo.ct_batch_element AWHERE A.be_link_key = 1 AND EXISTS ( SELECT * 	     FROM Linked Server Name.pubs.dbo.ct_batch B 	     WHERE B.bat_pkey = A.bat_key )
    Hinweis nur eine Zeile gelöscht wird, wie in die Filterbedingung in der Abfrage angegeben.
Status
Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind.Dieses Problem wurde erstmals im Microsoft SQL Server 2000 Service Pack 4.
Weitere Informationen
Weitere Informationen finden Sie die folgende KB-Artikelnummer:
824684Erläuterung von Standardbegriffen bei Microsoft Softwareupdates
INNER JOIN verteilte Abfrage des Verbindungsservers

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 825043 – Letzte Überarbeitung: 01/17/2015 05:20:13 – Revision: 4.3

Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Workgroup Edition, Microsoft SQL Server 2000 Desktop Engine (Windows), Microsoft SQL Server 2000 Enterprise Edition 64-bit

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbqfe kbtsql kbserver kbdatabase kbremoting kbquery kbsqlserv2000presp4fix kbfix kbbug KB825043 KbMtde
Feedback