sql usando 2 bases de datos distintas

29/05/2007 - 13:56 por Oscar | Informe spam
Hola

Tengo 2 tablas, pero cada una en una base de datos distintas, aunque en el
mismo servidor SQL. Hay alguna forma de hacer una sql que trabaje con estas
2 tablas, aunque sean de BD distintas?

Saludos, Oscar

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
29/05/2007 - 15:58 | Informe spam
Oscar,

Si, para eso debes cualificar las tablas con el nombre de la db.

Ejemplo:

select a.*, b.*
from db1.dbo.t1 as a inner join db2.dbo.t2 as b
on a.pk = b.pk
go


AMB


"Oscar" wrote:

Hola

Tengo 2 tablas, pero cada una en una base de datos distintas, aunque en el
mismo servidor SQL. Hay alguna forma de hacer una sql que trabaje con estas
2 tablas, aunque sean de BD distintas?

Saludos, Oscar



Respuesta Responder a este mensaje
#2 Oscar
29/05/2007 - 17:31 | Informe spam
Hola

Con lo que me has dicho he conseguido hacer la siguiente SQL:

SELECT *
FROM (SELECT (bd_epsilon.dbo.TRABAJADORES.ID_EMPRESA +
bd_epsilon.dbo.TRABAJADORES.ID_TRABAJADOR) AS OPERARIO,
HORAS_SEMANALES AS TOTAL
FROM bd_epsilon.dbo.CENTROS INNER JOIN
bd_epsilon.dbo.CENTROS_FISICOS
ON
bd_epsilon.dbo.CENTROS.ID_CENTRO_FISICO
= bd_epsilon.dbo.CENTROS_FISICOS.ID_CENTRO_FISICO INNER JOIN
bd_epsilon.dbo.TRABAJADORES ON
bd_epsilon.dbo.CENTROS.ID_EMPRESA = bd_epsilon.dbo.TRABAJADORES.ID_EMPRESA
AND
bd_epsilon.dbo.CENTROS.CCC =
bd_epsilon.dbo.TRABAJADORES.CCC AND
bd_epsilon.dbo.CENTROS.ID_CENTRO
= bd_epsilon.dbo.TRABAJADORES.ID_CENTRO) EPSILON INNER JOIN
(SELECT PTTRAINS_OPERARIO AS OPERARIO,
SUM(PTTRAINS_TOTAL_HORAS) AS TOTAL
FROM PT_TRABAJADORES_JORNADA
GROUP BY PTTRAINS_OPERARIO) SERVIGEST ON
SERVIGEST.OPERARIO = EPSILON.OPERARIO

Pero me da un error de collation conflict, porque puede ser?

Saludos y gracias, Oscar
"Alejandro Mesa" escribió en el
mensaje news:
Oscar,

Si, para eso debes cualificar las tablas con el nombre de la db.

Ejemplo:

select a.*, b.*
from db1.dbo.t1 as a inner join db2.dbo.t2 as b
on a.pk = b.pk
go


AMB


"Oscar" wrote:

Hola

Tengo 2 tablas, pero cada una en una base de datos distintas, aunque en
el
mismo servidor SQL. Hay alguna forma de hacer una sql que trabaje con
estas
2 tablas, aunque sean de BD distintas?

Saludos, Oscar



Respuesta Responder a este mensaje
#3 Alejandro Mesa
29/05/2007 - 19:46 | Informe spam
Oscar,

Por favor, postea el mensaje de error tal y como te aparece. Este error
puede darse al compara o concatenar columnas tipo char / varchar / nchar /
nvarchar, etc. que tienen diferente collation. Como solucion rapida, toma una
de las dos collation y fuerzala durante la operacion, usando COLLATE.

Ejemplo:

create table #t1 (
c1 varchar(50) collate Traditional_Spanish_CI_AI not null
)

create table #t2 (
c1 varchar(50) collate Traditional_Spanish_CS_AS not null
)

insert into #t1 values('Microsoft')
insert into #t2 values('Microsoft')
go

select
*
from
#t1 as t1
inner join
#t2 as t2
on t1.c1 = t2.c1
go

select
*
from
#t1 as t1
inner join
#t2 as t2
on t1.c1 = t2.c1 collate Traditional_Spanish_CI_AI
go

drop table #t1, #t2
go


AMB





"Oscar" wrote:

Hola

Con lo que me has dicho he conseguido hacer la siguiente SQL:

SELECT *
FROM (SELECT (bd_epsilon.dbo.TRABAJADORES.ID_EMPRESA +
bd_epsilon.dbo.TRABAJADORES.ID_TRABAJADOR) AS OPERARIO,
HORAS_SEMANALES AS TOTAL
FROM bd_epsilon.dbo.CENTROS INNER JOIN
bd_epsilon.dbo.CENTROS_FISICOS
ON
bd_epsilon.dbo.CENTROS.ID_CENTRO_FISICO
= bd_epsilon.dbo.CENTROS_FISICOS.ID_CENTRO_FISICO INNER JOIN
bd_epsilon.dbo.TRABAJADORES ON
bd_epsilon.dbo.CENTROS.ID_EMPRESA = bd_epsilon.dbo.TRABAJADORES.ID_EMPRESA
AND
bd_epsilon.dbo.CENTROS.CCC =
bd_epsilon.dbo.TRABAJADORES.CCC AND
bd_epsilon.dbo.CENTROS.ID_CENTRO
= bd_epsilon.dbo.TRABAJADORES.ID_CENTRO) EPSILON INNER JOIN
(SELECT PTTRAINS_OPERARIO AS OPERARIO,
SUM(PTTRAINS_TOTAL_HORAS) AS TOTAL
FROM PT_TRABAJADORES_JORNADA
GROUP BY PTTRAINS_OPERARIO) SERVIGEST ON
SERVIGEST.OPERARIO = EPSILON.OPERARIO

Pero me da un error de collation conflict, porque puede ser?

Saludos y gracias, Oscar
"Alejandro Mesa" escribió en el
mensaje news:
> Oscar,
>
> Si, para eso debes cualificar las tablas con el nombre de la db.
>
> Ejemplo:
>
> select a.*, b.*
> from db1.dbo.t1 as a inner join db2.dbo.t2 as b
> on a.pk = b.pk
> go
>
>
> AMB
>
>
> "Oscar" wrote:
>
>> Hola
>>
>> Tengo 2 tablas, pero cada una en una base de datos distintas, aunque en
>> el
>> mismo servidor SQL. Hay alguna forma de hacer una sql que trabaje con
>> estas
>> 2 tablas, aunque sean de BD distintas?
>>
>> Saludos, Oscar
>>
>>
>>



Respuesta Responder a este mensaje
#4 JCASTIBLANCO
30/05/2007 - 03:51 | Informe spam
Hola Alejandro Mesa,

con respecto a la solución que planteas de forzar el collation, tiene algo
que ver la configuración de collation settings que se halla elegido al
instalar la instacia de sql?. Es decir, si yo elegí la configuración
Modern_Spanish puedo trabajar sin problema una variable forzandola a ser de
un tipo Japanese?

"Alejandro Mesa" wrote:

Oscar,

Por favor, postea el mensaje de error tal y como te aparece. Este error
puede darse al compara o concatenar columnas tipo char / varchar / nchar /
nvarchar, etc. que tienen diferente collation. Como solucion rapida, toma una
de las dos collation y fuerzala durante la operacion, usando COLLATE.

Ejemplo:

create table #t1 (
c1 varchar(50) collate Traditional_Spanish_CI_AI not null
)

create table #t2 (
c1 varchar(50) collate Traditional_Spanish_CS_AS not null
)

insert into #t1 values('Microsoft')
insert into #t2 values('Microsoft')
go

select
*
from
#t1 as t1
inner join
#t2 as t2
on t1.c1 = t2.c1
go

select
*
from
#t1 as t1
inner join
#t2 as t2
on t1.c1 = t2.c1 collate Traditional_Spanish_CI_AI
go

drop table #t1, #t2
go


AMB





"Oscar" wrote:

> Hola
>
> Con lo que me has dicho he conseguido hacer la siguiente SQL:
>
> SELECT *
> FROM (SELECT (bd_epsilon.dbo.TRABAJADORES.ID_EMPRESA +
> bd_epsilon.dbo.TRABAJADORES.ID_TRABAJADOR) AS OPERARIO,
> HORAS_SEMANALES AS TOTAL
> FROM bd_epsilon.dbo.CENTROS INNER JOIN
> bd_epsilon.dbo.CENTROS_FISICOS
> ON
> bd_epsilon.dbo.CENTROS.ID_CENTRO_FISICO
> = bd_epsilon.dbo.CENTROS_FISICOS.ID_CENTRO_FISICO INNER JOIN
> bd_epsilon.dbo.TRABAJADORES ON
> bd_epsilon.dbo.CENTROS.ID_EMPRESA = bd_epsilon.dbo.TRABAJADORES.ID_EMPRESA
> AND
> bd_epsilon.dbo.CENTROS.CCC =
> bd_epsilon.dbo.TRABAJADORES.CCC AND
> bd_epsilon.dbo.CENTROS.ID_CENTRO
> = bd_epsilon.dbo.TRABAJADORES.ID_CENTRO) EPSILON INNER JOIN
> (SELECT PTTRAINS_OPERARIO AS OPERARIO,
> SUM(PTTRAINS_TOTAL_HORAS) AS TOTAL
> FROM PT_TRABAJADORES_JORNADA
> GROUP BY PTTRAINS_OPERARIO) SERVIGEST ON
> SERVIGEST.OPERARIO = EPSILON.OPERARIO
>
> Pero me da un error de collation conflict, porque puede ser?
>
> Saludos y gracias, Oscar
> "Alejandro Mesa" escribió en el
> mensaje news:
> > Oscar,
> >
> > Si, para eso debes cualificar las tablas con el nombre de la db.
> >
> > Ejemplo:
> >
> > select a.*, b.*
> > from db1.dbo.t1 as a inner join db2.dbo.t2 as b
> > on a.pk = b.pk
> > go
> >
> >
> > AMB
> >
> >
> > "Oscar" wrote:
> >
> >> Hola
> >>
> >> Tengo 2 tablas, pero cada una en una base de datos distintas, aunque en
> >> el
> >> mismo servidor SQL. Hay alguna forma de hacer una sql que trabaje con
> >> estas
> >> 2 tablas, aunque sean de BD distintas?
> >>
> >> Saludos, Oscar
> >>
> >>
> >>
>
>
>
Respuesta Responder a este mensaje
#5 Alejandro Mesa
30/05/2007 - 15:40 | Informe spam
JCASTIBLANCO,

No entiendo bien tu inquietud. No por forzar una collation, puedes comparar
texto en Español contra texto en Japones. Forzar una collation no significa
que SQL Server traducira el texto.

Existe collation a nivel de servidor, database y columna. Si no se es
consistente a la hora de crear objectos que trabajan con collation, entonces
podemos terminar, por ejemplo, teniendo columnas con diferente collation. Si
deseas trabajar con una collation en particular, enonces se debe usar COLLATE
cuando creamos el objeto.


AMB

"JCASTIBLANCO" wrote:

Hola Alejandro Mesa,

con respecto a la solución que planteas de forzar el collation, tiene algo
que ver la configuración de collation settings que se halla elegido al
instalar la instacia de sql?. Es decir, si yo elegí la configuración
Modern_Spanish puedo trabajar sin problema una variable forzandola a ser de
un tipo Japanese?

"Alejandro Mesa" wrote:

> Oscar,
>
> Por favor, postea el mensaje de error tal y como te aparece. Este error
> puede darse al compara o concatenar columnas tipo char / varchar / nchar /
> nvarchar, etc. que tienen diferente collation. Como solucion rapida, toma una
> de las dos collation y fuerzala durante la operacion, usando COLLATE.
>
> Ejemplo:
>
> create table #t1 (
> c1 varchar(50) collate Traditional_Spanish_CI_AI not null
> )
>
> create table #t2 (
> c1 varchar(50) collate Traditional_Spanish_CS_AS not null
> )
>
> insert into #t1 values('Microsoft')
> insert into #t2 values('Microsoft')
> go
>
> select
> *
> from
> #t1 as t1
> inner join
> #t2 as t2
> on t1.c1 = t2.c1
> go
>
> select
> *
> from
> #t1 as t1
> inner join
> #t2 as t2
> on t1.c1 = t2.c1 collate Traditional_Spanish_CI_AI
> go
>
> drop table #t1, #t2
> go
>
>
> AMB
>
>
>
>
>
> "Oscar" wrote:
>
> > Hola
> >
> > Con lo que me has dicho he conseguido hacer la siguiente SQL:
> >
> > SELECT *
> > FROM (SELECT (bd_epsilon.dbo.TRABAJADORES.ID_EMPRESA +
> > bd_epsilon.dbo.TRABAJADORES.ID_TRABAJADOR) AS OPERARIO,
> > HORAS_SEMANALES AS TOTAL
> > FROM bd_epsilon.dbo.CENTROS INNER JOIN
> > bd_epsilon.dbo.CENTROS_FISICOS
> > ON
> > bd_epsilon.dbo.CENTROS.ID_CENTRO_FISICO
> > = bd_epsilon.dbo.CENTROS_FISICOS.ID_CENTRO_FISICO INNER JOIN
> > bd_epsilon.dbo.TRABAJADORES ON
> > bd_epsilon.dbo.CENTROS.ID_EMPRESA = bd_epsilon.dbo.TRABAJADORES.ID_EMPRESA
> > AND
> > bd_epsilon.dbo.CENTROS.CCC =
> > bd_epsilon.dbo.TRABAJADORES.CCC AND
> > bd_epsilon.dbo.CENTROS.ID_CENTRO
> > = bd_epsilon.dbo.TRABAJADORES.ID_CENTRO) EPSILON INNER JOIN
> > (SELECT PTTRAINS_OPERARIO AS OPERARIO,
> > SUM(PTTRAINS_TOTAL_HORAS) AS TOTAL
> > FROM PT_TRABAJADORES_JORNADA
> > GROUP BY PTTRAINS_OPERARIO) SERVIGEST ON
> > SERVIGEST.OPERARIO = EPSILON.OPERARIO
> >
> > Pero me da un error de collation conflict, porque puede ser?
> >
> > Saludos y gracias, Oscar
> > "Alejandro Mesa" escribió en el
> > mensaje news:
> > > Oscar,
> > >
> > > Si, para eso debes cualificar las tablas con el nombre de la db.
> > >
> > > Ejemplo:
> > >
> > > select a.*, b.*
> > > from db1.dbo.t1 as a inner join db2.dbo.t2 as b
> > > on a.pk = b.pk
> > > go
> > >
> > >
> > > AMB
> > >
> > >
> > > "Oscar" wrote:
> > >
> > >> Hola
> > >>
> > >> Tengo 2 tablas, pero cada una en una base de datos distintas, aunque en
> > >> el
> > >> mismo servidor SQL. Hay alguna forma de hacer una sql que trabaje con
> > >> estas
> > >> 2 tablas, aunque sean de BD distintas?
> > >>
> > >> Saludos, Oscar
> > >>
> > >>
> > >>
> >
> >
> >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida