REVISIÓN: Una instrucción SELECT devuelve un conjunto de resultados incorrectos si se utiliza un servidor vinculado en SQL Server 2005 o en SQL Server 2008

Seleccione idioma Seleccione idioma
Id. de artículo: 975417 - Ver los productos a los que se aplica este artículo
Microsoft distribuye correcciones de Microsoft SQL Server 2005 como un archivo que se puede descargar. Como las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2005.Microsoft distribuye correcciones de Microsoft SQL Server 2008 como un archivo que se puede descargar. Como las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008.
Expandir todo | Contraer todo

En esta página

Síntomas

En Microsoft SQL Server 2005 o Microsoft SQL Server 2008, ejecute una instrucción SELECT a través de las tablas que utilizan un servidor vinculado como un origen de datos y se devuelve un conjunto de resultados incorrecto.

Solución

SQL Server 2005 Service Pack 3

La corrección para este problema se publicó por primera vez en actualización acumulativa 6 para SQL Server 2005 Service Pack 3. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
974648Paquete de actualización acumulativa 6 para SQL Server 2005 Service Pack 3
Nota Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2005. Microsoft recomienda que considere aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
960598Compilaciones de SQL Server 2005 lanzadas después del lanzamiento de SQL Server 2005 Service Pack 3
Microsoft SQL Server 2005 las revisiones se crean para determinados service Pack de SQL Server. Debe aplicar una revisión de SQL Server 2005 Service Pack 3 a una instalación de SQL Server 2005 Service Pack 3. De forma predeterminada, cualquier revisión suministrada en un service pack de SQL Server se incluye en el siguiente service pack.

La versión de lanzamiento de SQL Server 2008

Importante Debe instalar esta revisión si está ejecutando la versión de lanzamiento de SQL Server 2008.

La corrección para este problema se publicó por primera vez en 8 de actualización acumulativa. Para obtener más información acerca de cómo obtener este paquete de actualización acumulativa para SQL Server 2008, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
9759768 De paquete de actualización acumulativa para SQL Server 2008
Nota Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008. Recomendamos que considere aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
956909Compilaciones de SQL Server 2008 se publicaron después del lanzamiento de SQL Server 2008

SQL Server 2008 Service Pack 1

Importante Debe instalar esta revisión si está ejecutando SQL Server 2008 Service Pack 1.

La corrección para este problema se publicó por primera vez en 5 de actualización acumulativa para SQL Server 2008 Service Pack 1. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
9759775 De paquete de actualización acumulativa para SQL Server 2008 Service Pack 1
Nota Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008. Microsoft recomienda que considere aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
970365Compilaciones de SQL Server 2008 se publicaron después del lanzamiento de SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 revisiones se crean para determinados service Pack de SQL Server. Debe aplicar una revisión de Service Pack 1 de SQL Server 2008 a una instalación de SQL Server 2008 Service Pack 1. De forma predeterminada, cualquier revisión suministrada en un service pack de SQL Server se incluye en el siguiente service pack.

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:".

Más información

Pasos para reproducir el problema

The following sample statements can be used to reproduce this problem.
-- create sample database
--
create database test
go

use test
go

--
-- create sample table
--
if exists (select * from sys.objects where object_id = OBJECT_ID('T1'))
drop table T1

create table T1 (
ID int primary key, 
CODE_AB char(2) not null,
CATEGORY char(1) not null default ('0')
) 

if exists (select * from sys.objects where object_id = OBJECT_ID('M1'))
drop table M1

create table M1 (
CODE_AB char(2) primary key,
[NAME] varchar(20) not null 
) 

insert into T1 (ID, CODE_AB) values ( 1, '66') 
insert into T1 (ID, CODE_AB) values ( 2, '66') 
insert into T1 (ID, CODE_AB) values ( 3, '77')
insert into T1 (ID, CODE_AB) values ( 4, '55') 
insert into T1 (ID, CODE_AB) values ( 5, '88') 
insert into T1 (ID, CODE_AB) values ( 6, '88') 
insert into T1 (ID, CODE_AB) values ( 7, '77') 
insert into T1 (ID, CODE_AB) values ( 8, '66') 
insert into T1 (ID, CODE_AB) values ( 9, '77') 
insert into T1 (ID, CODE_AB) values ( 10, '66') 
insert into T1 (ID, CODE_AB) values ( 11, '66') 
insert into T1 (ID, CODE_AB) values ( 12, '88') 
insert into T1 (ID, CODE_AB) values ( 13, '88') 
insert into T1 (ID, CODE_AB) values ( 14, '88') 
insert into T1 (ID, CODE_AB) values ( 15, '22') 
insert into T1 (ID, CODE_AB) values ( 16, '88') 
insert into T1 (ID, CODE_AB) values ( 17, '88') 
insert into T1 (ID, CODE_AB) values ( 18, '88') 
insert into T1 (ID, CODE_AB) values ( 19, '44') 
insert into T1 (ID, CODE_AB) values ( 20, '88') 
insert into T1 (ID, CODE_AB) values ( 21, '66') 
insert into T1 (ID, CODE_AB) values ( 22, '66') 
insert into T1 (ID, CODE_AB) values ( 23, '77') 
insert into T1 (ID, CODE_AB) values ( 24, '77') 
insert into T1 (ID, CODE_AB) values ( 25, '77') 
insert into T1 (ID, CODE_AB) values ( 26, '66') 
insert into T1 (ID, CODE_AB) values ( 27, '66') 
insert into T1 (ID, CODE_AB) values ( 28, '66') 
insert into T1 (ID, CODE_AB) values ( 29, '44') 
insert into T1 (ID, CODE_AB) values ( 30, '77') 
insert into T1 (ID, CODE_AB) values ( 31, '44') 
insert into T1 (ID, CODE_AB) values ( 32, '66') 
insert into T1 (ID, CODE_AB) values ( 33, '88') 
insert into T1 (ID, CODE_AB) values ( 34, '88') 
insert into T1 (ID, CODE_AB) values ( 35, '66') 
insert into T1 (ID, CODE_AB) values ( 36, '66') 
insert into T1 (ID, CODE_AB) values ( 37, '77') 
insert into T1 (ID, CODE_AB) values ( 38, '77') 
insert into T1 (ID, CODE_AB) values ( 39, '77') 
insert into T1 (ID, CODE_AB) values ( 40, '44') 
insert into T1 (ID, CODE_AB) values ( 41, '77') 
insert into T1 (ID, CODE_AB) values ( 42, '77') 
insert into T1 (ID, CODE_AB) values ( 43, '66') 
insert into T1 (ID, CODE_AB) values ( 44, '66') 
insert into T1 (ID, CODE_AB) values ( 45, '77') 
insert into T1 (ID, CODE_AB) values ( 46, '44') 
insert into T1 (ID, CODE_AB) values ( 47, '66') 
insert into T1 (ID, CODE_AB) values ( 48, '66') 
insert into T1 (ID, CODE_AB) values ( 49, '66') 
insert into T1 (ID, CODE_AB) values ( 50, '88') 
insert into T1 (ID, CODE_AB) values ( 51, '66') 
insert into T1 (ID, CODE_AB) values ( 52, '44') 
insert into T1 (ID, CODE_AB) values ( 53, '88') 
insert into T1 (ID, CODE_AB) values ( 54, '88') 
insert into T1 (ID, CODE_AB) values ( 55, '88') 
insert into T1 (ID, CODE_AB) values ( 56, '88') 
insert into T1 (ID, CODE_AB) values ( 57, '22') 
insert into T1 (ID, CODE_AB) values ( 58, '88') 
insert into T1 (ID, CODE_AB) values ( 59, '11') 
insert into T1 (ID, CODE_AB) values ( 60, '11') 
insert into T1 (ID, CODE_AB) values ( 61, '11') 
insert into T1 (ID, CODE_AB) values ( 62, '88') 
insert into T1 (ID, CODE_AB) values ( 63, '77') 
insert into T1 (ID, CODE_AB) values ( 64, '77') 
insert into T1 (ID, CODE_AB) values ( 65, '66') 
insert into T1 (ID, CODE_AB) values ( 66, '77') 
insert into T1 (ID, CODE_AB) values ( 67, '77') 
insert into T1 (ID, CODE_AB) values ( 68, '77') 
insert into T1 (ID, CODE_AB) values ( 69, '33') 
insert into T1 (ID, CODE_AB) values ( 70, '33') 
insert into T1 (ID, CODE_AB) values ( 71, '66') 
insert into T1 (ID, CODE_AB) values ( 72, '66') 
insert into T1 (ID, CODE_AB) values ( 73, '66') 
insert into T1 (ID, CODE_AB) values ( 74, '11') 
insert into T1 (ID, CODE_AB) values ( 75, '77') 
insert into T1 (ID, CODE_AB) values ( 76, '11') 
insert into T1 (ID, CODE_AB) values ( 77, '66') 
insert into T1 (ID, CODE_AB) values ( 78, '66') 
insert into T1 (ID, CODE_AB) values ( 79, '66') 
insert into T1 (ID, CODE_AB) values ( 80, '66') 
insert into T1 (ID, CODE_AB) values ( 81, '66') 
insert into T1 (ID, CODE_AB) values ( 82, '66') 
insert into T1 (ID, CODE_AB) values ( 83, '66') 
insert into T1 (ID, CODE_AB) values ( 84, '66') 
insert into T1 (ID, CODE_AB) values ( 85, '66') 
insert into T1 (ID, CODE_AB) values ( 86, '66') 
insert into T1 (ID, CODE_AB) values ( 87, '77') 
insert into T1 (ID, CODE_AB) values ( 88, '77') 
insert into T1 (ID, CODE_AB) values ( 89, '66') 
insert into T1 (ID, CODE_AB) values ( 90, '11') 
insert into T1 (ID, CODE_AB) values ( 91, '88') 
insert into T1 (ID, CODE_AB) values ( 92, '88') 
insert into T1 (ID, CODE_AB) values ( 93, '44') 
insert into T1 (ID, CODE_AB) values ( 94, '66') 
insert into T1 (ID, CODE_AB) values ( 95, '77') 
insert into T1 (ID, CODE_AB) values ( 96, '44') 
insert into T1 (ID, CODE_AB) values ( 97, '77') 
insert into T1 (ID, CODE_AB) values ( 98, '77') 
insert into T1 (ID, CODE_AB) values ( 99, '88') 
insert into T1 (ID, CODE_AB) values (100, '88') 
insert into T1 (ID, CODE_AB) values (101, '88') 
insert into T1 (ID, CODE_AB) values (102, '77') 
insert into T1 (ID, CODE_AB) values (103, '66') 
insert into T1 (ID, CODE_AB) values (104, '77') 

insert into M1 values ('66', 'F') 
insert into M1 values ('77', 'G') 

if exists (select srv.name from sys.servers srv where srv.name = '127.0.0.1')
exec sp_dropserver @server = '127.0.0.1', @droplogins = 'droplogins'

exec sp_addlinkedserver @server = '127.0.0.1', @srvproduct = 'SQL Server'
exec sp_addlinkedsrvlogin @rmtsrvname = '127.0.0.1', @useself = 'True', @locallogin = NULL, @rmtuser = NULL, @rmtpassword = NULL

go

--
-- compare results. 
--

-- 1. select local tables. -> expect a correct result.
select *
from (

select 
ID,
CODE_AB,
CODE_A = case when CATEGORY = '0' then substring(T1.CODE_AB, 1, 1) end,
CODE_B = case when CATEGORY = '0' then substring(T1.CODE_AB, 2, 1) end,
CODE_NAME = case when CATEGORY = '0' then (
select
M1.CODE_AB + ' ' + M1.[NAME]
from M1 
where M1.CODE_AB = T1.CODE_AB
) end
from T1

) as TEMP
where CODE_A = '7' and CODE_B = '7'

-- 2. select tables via linked server. -> expect a wrong result.
select *
from (

select 
ID,
CODE_AB,
CODE_A = case when CATEGORY = '0' then substring(T1.CODE_AB, 1, 1) end,
CODE_B = case when CATEGORY = '0' then substring(T1.CODE_AB, 2, 1) end,
CODE_NAME = case when CATEGORY = '0' then (
select
M1.CODE_AB + ' ' + M1.[NAME]
from [127.0.0.1].test.dbo.M1 as M1 
where M1.CODE_AB = T1.CODE_AB
) end
from [127.0.0.1].test.dbo.T1 as T1

) as TEMP
where CODE_A = '7' and CODE_B = '7' 
--order by CODE_AB -- if we use this the correct result will return.
go

--
-- drop linked server, drop sample database.
--
/*
if exists (select srv.name from sys.servers srv where srv.name = '127.0.0.1')
exec sp_dropserver @server = '127.0.0.1', @droplogins = 'droplogins'

use master
go
if exists (select * from sys.databases where name = 'TEST')
drop database test
*/

Referencias

Para obtener más información acerca de cómo el modelo de servicio incremental para SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
935897Un modelo incremental de servicio está disponible desde el equipo de SQL Server para entregar revisiones para problemas detectados
Para obtener más información acerca de cómo obtener SQL Server 2005 Service Pack 3, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
913089Cómo obtener el service pack más reciente para SQL Server 2005
Para obtener más información acerca de las nuevas características de SQL Server 2005 Service Pack 3 (SP3) y las mejoras de SQL Server 2005 SP3, visite el siguiente sitio Web:
http://go.microsoft.com/fwlink/?LinkId=131442
Para obtener más información acerca del esquema de nomenclatura para las actualizaciones de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
822499Nuevo esquema de nomenclatura para los paquetes de actualización de software de Microsoft SQL Server
Para obtener más información acerca de la terminología relativa a las actualizaciones de software, 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: 975417 - Última revisión: lunes, 19 de octubre de 2009 - Versión: 1.1
La información de este artículo se refiere a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
Palabras clave: 
kbmt kbexpertiseadvanced kbsurveynew kbqfe kbfix KB975417 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): 975417

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