Bueno últimamente nos ha tocado trabajar con servidores vinculados
Ambos servidores se ven:
En servidor1 está mibase1 donde esta mitabla1 con su columna nombredoc1 --> no es case-sensitive
En servidor2 está mibase2 donde esta mitabla2 con su columna nombredoc2 --> es case-sensitive
Si en servidor1 ejecuto
select top 1 NOMBREDOC2 from servidor2. mibase2 .dbo. mitabla2 --> ok
select top 1 nombredoc2 from servidor2. mibase2.dbo. mitabla2 --> ok
Si en servidor2 hago
select top 1 NOMBREDOC1 from servidor1. Mibase1 .dbo. mitabla1 --> error
select top 1 nombredoc1 from servidor1. Mibase1.dbo. mitabla1--> ok
Lo ha configurado para que sea case-sensitive hasta el nombre de las columnas!!!!
La configuración es importante, pero si lo pones a nivel de estructura mira las implicaciones (sobre todo en una migración)
Pregunta es ¿
Si se puede tener la BD definida como case sensible y consultas NO?
Respuesta es :
hay que crear la BD como case no sensible y tablas columnas como sensibles
http://msdn.microsoft.com/en-us/library/ms143508(v=sql.105).aspx
SQL Server 2008 supports setting collations at the following levels:
• Server
• Database
• Column
• Expression
http://msdn.microsoft.com/en-us/library/ms187053(v=sql.90).aspx
Parameters for stored procedures or functions, alias data types, and variables are assigned the default collation of the database. To change the collation of an alias type, you must drop and re-create it.
Problemas de rendimiento
Servidor 2
select distinct a.fecha , a.nif ,
b.nombre from basedatos2.dbo.tabla2 a ,servidor1.base1.dbo.tabla1 b
where a.nif = b.nif and a.fecha = '08/10/2012' order by b.nombre asc --> 6sg
Servidor 1
select distinct a.fecha , a.nif ,
b.nombre from servidor2.basedatos2.dbo.tabla2 a , base1.dbo.tabla1 b
where a.nif = b.nif and a.fecha = '08/10/2012' order by b.nombre asc --> IMEDIATO
Para que vaya rápido en el servidor2
select distinct a.fecha , a.nif ,
b.nombre from basedatos2.dbo.tabla2 a , openquery(servidor1, 'select * from base1.dbo.tabla1') b
where a.nif = b.nif and a.fecha = '08/10/2012' order by b.nombre asc -->INMEDIATO
Las soluciones posibles :
- mejorar las estructura de la consulta, (índices, openquery)
- replicar la base de datos Replicar las base de datos ( http://www.sqlservercentral.com/articles/Linked+Server/62246/)
La "chapu" para cuando vas fatal de tiempo es aumentar el tiempo de time-out de las consultas de tu código