REVISIÓN: Filas se eliminan inesperadamente cuando ejecuta una consulta distribuida para eliminar o actualizar una tabla de servidor vinculado

Seleccione idioma Seleccione idioma
Id. de artículo: 825043 - Ver los productos a los que se aplica este artículo
Nº de error: 469673 (SQL Server 8.0)
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando se ejecuta una consulta distribuida que utiliza un nombre de cuatro partes para eliminar o actualizar filas en una tabla de servidor vinculado de una base de datos de Microsoft SQL Server 2000, también se eliminan las filas de la tabla de servidor vinculado que no cumplen la condición de combinación. Este problema puede producirse si la instrucción de DELETE de Transact-SQL o la instrucción UPDATE de Transact-SQL en la consulta distribuida implica una combinación y utiliza la sintaxis no ANSI. Este problema no puede producirse si ejecuta una consulta distribuida que utiliza la misma instancia de SQL Server como servidor vinculado en la consulta distribuida.

Solución

Información de Service Pack

Para resolver este problema, consiga el Service Pack más reciente para Microsoft SQL Server 2000. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
290211Cómo obtener el Service Pack más reciente de SQL Server 2000

Información de revisiones

La versión en inglés de este hotfix tiene los atributos de archivo (o atributos de último archivo) mostrados en la siguiente tabla. Las fechas y las horas de estos archivos se muestran en hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria de la herramienta fecha y hora en el panel de control.
   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 Debido a la interdependencia entre archivos, el más reciente revisión o característica que contiene estos archivos quizás contenga también archivos adicionales.

Solución

Para evitar este problema, siga estos pasos:
  1. Crear un índice único en la tabla de servidor vinculado que elimina de la consulta distribuida o actualizaciones.
  2. Reemplace la sintaxis no ANSI de la instrucción DELETE de Transact-SQL o de la instrucción UPDATE de Transact-SQL en la consulta distribuida con sintaxis ANSI.
En el ejemplo siguiente se vuelve a crear la condición de problema:
  1. Crear una base de datos prueba en la instancia de SQL Server que se utiliza como servidor de origen.
  2. Agregar un equipo que ejecuta SQL Server como un servidor vinculado a la instancia de SQL Server.
  3. En el equipo que ejecuta SQL Server y que se agregó como un servidor vinculado, ejecute la siguiente secuencia de comandos Transact-SQL para crear dos tablas:
    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. Ejecute el siguiente script Transact-SQL para llenar los datos de prueba de las tablas que creó en el paso 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. En la base de datos de origen de SQL Server, ejecute el script de Transact-SQL siguiente:
    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
    pueden eliminar filas Nota cientos de uno en lugar de una única fila.
Para evitar el problema que ocurre en el ejemplo anterior, siga estos pasos:
  1. En el equipo que ejecuta SQL Server y que se agregó como un servidor vinculado, ejecute la siguiente secuencia de comandos de Transact-SQL para volver a llenar los datos de prueba que se ha eliminado:
    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. En el equipo que ejecuta SQL Server y que se agregó como un servidor vinculado, ejecute la secuencia de comandos de Transact-SQL siguiente:
    CREATE UNIQUE INDEX idx1 ON ct_batch_element(be_link_key)
  3. En la base de datos de origen de SQL Server, ejecute el script de Transact-SQL siguiente:
    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 se elimina una fila, como se especifica en la condición del filtro en la consulta.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".Este problema se corrigió por primera vez en Pack 4 de Microsoft SQL Server 2000.

Más información

Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft

Propiedades

Id. de artículo: 825043 - Última revisión: viernes, 02 de noviembre de 2007 - Versión: 4.3
La información de este artículo se refiere 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
Palabras clave: 
kbmt kbhotfixserver kbqfe kbqfe kbtsql kbserver kbdatabase kbremoting kbquery kbsqlserv2000presp4fix kbfix kbbug KB825043 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 825043

Enviar comentarios

 

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