¿Relacionar 2tablas de BDs con Integridad?

Hola. He leído que se pueden relacionar 2 tablas de distintas bases de datos de la siguiente manera :
select uno.campo1, dos.campo1
from basededatos1.tabla1 uno, basededatos2.tabla1 dos
where uno.campo1 = dos.campo1
Lo he probado y funciona muy bien. Me ha sido de gran ayuda, pero ...
Creo que no mantiene la integridad referencial.
¿Cómo hago para que exista integridad referencial entre 2 tablas de diferentes bases de datos?
He probado con el siguiente código :
create table tt1
(Contador int,
texto nvarchar (30),
serie nvarchar (5)
FOREIGN KEY REFERENCES gestión.dbo.TT (serie))
GO
Intentando crear la tabla TT1 en la base
de datos Pruebas_Gest. El campo de esta nueva tabla quiero que sea clave foránea de la tabla TT de la base de datos Gestión.
El analizador de consultas me devuelve el siguiente mensaje :
Servidor: mensaje 1763, nivel 16, estado 1, línea 1
No se admiten referencias cruzadas de claves externas entre bases de datos. Clave externa 'gestión.dbo.TT'.
Gracias por atender mi mensaje.
A ver si me puede ayudar. Espero su contestación. Un saludo.

3 Respuestas

Respuesta
Tienes que utilizar triggers para mantener la integridad de datos entre dos DB diferentes.
Ante todo, gracias por responder a mi pregunta pero lo de que se puede hacer con los triggers ya lo se. No sabia que sql server no incorporaba esa opción. Ahora ya lo se. Venga, un saludo y gracias.
Respuesta
1
En SQLServer no se puede. Se que en Oracle si se puede si se crea lo que se llama un "Alias" de base de datos. Pero en SQLServer no.
Si es muy necesario puedes simularlo mediante Triggers (yo nunca lo he tenido que hacer).
La idea es crear los triggers de insert y update en la tabla TT1 para que compruebe en la otra base de datos que existe el valor introducido en el campo "serie" y en la tabla TT el trigger de delete para que de error en caso de que existan valores en la tabla TT1. Eso sí, necesitas seguir haciendo las consultas de la forma que indicas al principio.
Es una solución compleja y te recomiendo que la utilices solo si es realmente necesario.
Gracias por la respuesta. En el caso de
Que cree los triggers y me funcionen, te
Aviso si quieres y te mando mi solución.
RE:Integridad referencial (24/6/2002)
En SQLServer no se puede. Se que en Oracle si se puede si se crea lo que se llama un "Alias" de base de datos. Pero en SQLServer no.
Si es muy necesario puedes simularlo mediante Triggers (yo nunca lo he tenido que hacer).
La idea es crear los triggers de insert y update en la tabla TT1 para que compruebe en la otra base de datos que existe el valor introducido en el campo "serie" y en la tabla TT el trigger de delete para que de error en caso de que existan valores en la tabla TT1. Eso sí, necesitas seguir haciendo las consultas de la forma que indicas al principio.
Es una solución compleja y te recomiendo que la utilices solo si es realmente necesario.
Un saludo.
De nada.
Y claro que me encantaría saber si ha funcionado.
Que tengas suerte.
Respuesta
1
Siento no poder ayudarte en este asunto, ya que nunca he utilizado claves externas. El mensaje de error parece ser suficientemente claro. Una posibilidad sería hacer una copia de la tabla TT en Pruebas_Gest, y mantenerla mediante la programación de Triggers (desencadenadores) en gestión.. TT.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas