entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

buen dia ,explico mi problema :

tengo unas tablas con sus claves primarias y foraneas sin problema para las relaciones entre dichas tablas estas relaciones las creo apartir de el diseñador (no las realizo por medio de comandos) ya que es mas sencillo , el problemas es cuando quiero hacer una relacion o meter una clave foranea referenciada a un campo de una tabla que esta en otra bd ejemplo:

con esta estructura :
base_datos.eschema.nombre_tabla.campo_tabla1

donde : requiero hacer

primary key: pueba.test.perfil.idperfil requiero hacer una relacion con foreign key: produccion.alert.alert.idperfil

por medio de diseño no me visualiza las tablas de otra base de datos asi que me di a la tarea de buscar como realizar la asiganacion de la clave foranea por medio de codigo y puse el siguiente codigo :

ALTER TABLE NOMBRE DA LA TABLA ADD CONSTRAINT FK_NOMBREDELATABLA_N0MBRE DE EL CAMPO FOREIGN KEY (NOMBRE DE CAMPO)REFERENCES TABLAFINAL (CAMPO)

rellenando los campos de requisito ejecute el codigo pero sin exito pues me salio este error :

sg 1763, Level 16, State 0, Line 1
No se admiten referencias cruzadas de claves externas entre bases de datos. Clave externa 'PERFIL'.
Msg 1750, Level 16, State 0, Line 1
No se pudo crear la restricción. Consulte los errores anteriores.

¿alguna idea de como hacer esta relacion ?

1 Respuesta

1voto

bl4z3r Puntos16850

SQL Server 2008 no soporta claves foráneas entre base de datos. La documentación oficial deja en claro el por que

CREATE TRIGGER (Transact-SQL)

Los desencadenadores DML se utilizan frecuentemente para imponer las reglas de negocios y la integridad de los datos. SQL Server proporciona integridad referencial declarativa (DRI) mediante las instrucciones ALTER TABLE y CREATE TABLE. Sin embargo, DRI no proporciona integridad referencial entre bases de datos. La integridad referencial se refiere a las reglas acerca de la relación entre la clave principal y la clave externa de las tablas. Para exigir la integridad referencial, utilice las restricciones de tipo PRIMARY KEY y FOREIGN KEY en ALTER TABLE y CREATE TABLE. Si existen restricciones en la tabla de desencadenadores, se comprueban después de la ejecución del desencadenador INSTEAD OF y antes de la de AFTER. Si se infringen las restricciones, se revierten las acciones del desencadenador INSTEAD OF y el desencadenador AFTER no se ejecuta.

Una aproximación para resolver esto es a través de desencadenadores (triggers).

CREATE TRIGGER dbo.MiDescandenador ON dbo.MiTabla, AFTER INSERT, UPDATE
AS
BEGIN

   IF NOT EXISTS(SELECT ColumnaPK FROM OtraBd.dbo.Tabla WHERE ColumnaPK IN (SELECT ColumnaFK FROM INSERTED) BEGIN
      -- Manejar el error de integridad referencial aqui.
   END

END

Nota: Si hay necesidad de usar una tabla que esta fuera de la base de datos, esto es un claro indicio de un mal diseño diseño de la misma. Por lo general, las tablas que contiene una base de datos tienen un dominio en común. Si ves este tipo de situación, por lo general, se recomienda agregar esta tabla a la base de datos ya que lo mas probable es que pertenezca al dominio de tu problema.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta