FIX: Righe in modo imprevisto vengono eliminati quando si esegue una query distribuita per eliminare o aggiornare una tabella di server collegato

Traduzione articoli Traduzione articoli
Identificativo articolo: 825043 - Visualizza i prodotti a cui si riferisce l?articolo.
Bug #: 469673 (SQL Server 8.0)
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si esegue una query distribuita che utilizza un nome composto da quattro parti per eliminare o aggiornare righe in una tabella di server collegato in un database di Microsoft SQL Server 2000, vengono eliminate anche le righe della tabella server collegato che non soddisfano la condizione di join. Questo problema può verificarsi se l'istruzione DELETE di Transact SQL o l'istruzione di Transact-SQL UPDATE nella query distribuita implica un join e utilizza la sintassi non ANSI. Questo problema non può verificarsi se si esegue una query distribuita che utilizza la stessa istanza di SQL Server come server collegato nella query distribuita.

Risoluzione

Informazioni sul Service pack

Per risolvere il problema, ottenere il service pack più recente per Microsoft SQL Server 2000. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
290211Come ottenere il service pack più recente per SQL Server 2000

Informazioni sull'hotfix

La versione di lingua inglese di questo aggiornamento rapido (hotfix) presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Le date e le ore per questi file sono indicati in UTC (Coordinated Universal Time). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e l'ora locale, utilizzare la scheda fuso orario dello strumento Data e ora del Pannello di controllo.
   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   
Nota A causa delle dipendenze fra i file, la funzionalità che contiene i file o l'aggiornamento rapido (hotfix) più recente può contenere anche ulteriori file.

Workaround

Per aggirare questo problema, attenersi alla seguente procedura:
  1. Creare un indice univoco nella tabella di server collegato che elimina la query distribuita o aggiornamenti.
  2. Sostituire la sintassi non ANSI dell'istruzione DELETE di Transact SQL o dell'istruzione Transact-SQL UPDATE nella query distribuita con sintassi ANSI.
Nell'esempio seguente viene ricreata la condizione del problema:
  1. Creare un database di test sull'istanza di SQL Server deve essere utilizzato come server di origine.
  2. Aggiunta di un computer che esegue SQL Server come server collegato all'istanza di SQL Server.
  3. Sul computer che esegue SQL Server e che è stato aggiunto come un server collegato, eseguire lo script di Transact-SQL seguente per creare due tabelle:
    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. Eseguire lo script Transact-SQL riportato di seguito per popolare i dati di test nelle tabelle creato nel passaggio 3:
    DECLARE @count int
    SET @count = 0
    WHILE @count < 100
    BEGIN
    INSERT INTO ct_batch VALUES (@count,2,GETDATE(),GETDATE(),'closed',0)
    INSERT INTO ct_batch_element VALUES (100,1,@count,null,null)
    SET @count = @count + 1
    END
    INSERT INTO ct_batch VALUES (100,2,GETDATE(),GETDATE(),'current',0)
    GO
  5. Nel database di SQL Server di origine, eseguire lo script di Transact-SQL riportato di seguito:
    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 B
    ON A.bat_key=B.bat_pkey 
    WHERE A.be_link_key = 1
    righe Nota centinaia di uno possono essere eliminate anziché solo una riga.
Per aggirare il problema che si verifica nell'esempio precedente, attenersi alla seguente procedura:
  1. Sul computer che esegue SQL Server e che è stato aggiunto come un server collegato, eseguire il seguente script Transact-SQL per ripopolare i dati di test che è stati eliminati:
    DECLARE @count int
    SET @count = 0
    WHILE @count < 100
    BEGIN
    INSERT INTO ct_batch VALUES (@count,2,GETDATE(),GETDATE(),'closed',0)
    INSERT INTO ct_batch_element VALUES (100,1,@count,null,null)
    SET @count = @count + 1
    END
    INSERT INTO ct_batch VALUES (100,2,GETDATE(),GETDATE(),'current',0)
    GO
  2. Sul computer che esegue SQL Server e che è stato aggiunto come un server collegato, eseguire lo script Transact-SQL riportato di seguito:
    CREATE UNIQUE INDEX idx1 ON ct_batch_element(be_link_key)
  3. Nel database di SQL Server di origine, eseguire lo script di Transact-SQL riportato di seguito:
    DELETE Linked Server Name.pubs.dbo.ct_batch_element 
    FROM Linked Server Name.pubs.dbo.ct_batch_element A
    WHERE A.be_link_key = 1 
    AND EXISTS ( SELECT * 
    	     FROM Linked Server Name.pubs.dbo.ct_batch B 
    	     WHERE B.bat_pkey = A.bat_key )
    
    Nota solo una riga viene eliminata, come specificato nella condizione di filtro nella query.

Status

Microsoft ha confermato che questo problema riguarda i prodotti sono elencati nella sezione "Si applica a".Questo problema è stato innanzitutto corretto in SQL Server 2000 Service Pack 4.

Informazioni

Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
824684Descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft

Proprietà

Identificativo articolo: 825043 - Ultima modifica: venerdì 2 novembre 2007 - Revisione: 4.3
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi: 
kbmt kbhotfixserver kbqfe kbqfe kbtsql kbserver kbdatabase kbremoting kbquery kbsqlserv2000presp4fix kbfix kbbug KB825043 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 825043
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com