2009-09-14 25 views
15

Tengo dos bases de datos en SQL Server y tengo una tabla común para ambas bases de datos, una gran tabla importante que contiene las claves externas a otras tablas. El problema es que la tabla está en Base de datos A, y necesito remitir claves externas a esta tabla desde Base de datos B.claves externas en la tabla de base de datos diferente

Sé que SQL no es compatible con la integridad referencial de bases de datos cruzadas, entonces, ¿cuál es la mejor manera de lograr esto? Estoy pensando en combinar dos bases de datos y convertirlas en una única base de datos, no importaría el aumento de la complejidad.

¿Alguna sugerencia?

+1

Bastante seguro, la respuesta es no, porque las claves foráneas solo pueden hacer referencia a las tablas locales, no a las tablas vinculadas desde otra base de datos. Ver http://stackoverflow.com/questions/442587/can-you-have-a-foreign-key-onto-a-view-of-a-linked-server-table-in-sqlserver-2k5 –

+0

ok entonces yo Supongo que combinaré dos bases de datos ... sé que podemos usar seleccionar para copiar tablas, pero ¿hay alguna forma de copiar, incluidas las relaciones y las claves? – SweetGangster

Respuesta

1

He aquí un artículo sobre cómo utilizar el asistente de SSIS Importar/Exportar:

http://www.databasejournal.com/features/mssql/article.php/3580216/SQL-Server-2005-Import--Export-Wizard.htm

La forma más sencilla de hacer esto es sólo para exportar una base de datos (que haría uso de la más pequeña de las dos) al formato que sea más conveniente para usted, y luego importarlo en el otro. Siempre que los nombres de las tablas sean todos diferentes, esto no debería presentar ningún problema.

1

Los disparadores se pueden escribir para forzar la integridad referencial contra diferentes bases de datos.

7

Evitaría hacer esto si pudiera, ¿puede mantener ambas tablas en una base de datos y usar una FK?

Las tablas padre e hijo se encuentran en diferentes bases de datos.

Aunque no puede utilizar una clave externa en esta situación, existen soluciones alternativas: puede usar desencadenantes o UDF envueltos en restricciones de comprobación. De cualquier manera, la integridad de su información no es completamente estanca: si la base de datos con su tabla principal falla y la restaura desde una copia de seguridad, puede terminar fácilmente con huérfanos.

La relación entre padres e hijos se aplica mediante desencadenantes.

Hay un buen número de situaciones en las que los desencadenantes no se activan, tales como:

· se deja caer una mesa.

· Una tabla está truncada.

· La configuración para activadores anidados y/o recursivos evita que se dispare un disparador.

También un disparador puede ser simplemente incorrecto. De cualquier manera, puede terminar con huérfanos en su base de datos.

+0

ahora tengo un nuevo problema, estaba tratando de combinar las bases de datos, pero tuve que modificar algunas columnas para crear referencias de claves externas ..ex: tableA columna (clave externa) y TableB columnb (clave principal) pero eran de diferente tamaño ColumnA es de varchar (255) y columnB es varchar (55) así que para unir esas dos columnas tengo que hacerlas del mismo tipo y tamaño ... cuando emití alter columnA para cambiarlo a varchar (55) recibí algunos errores que algunos objetos Depende de la columna y no puede ser alterado ??? – SweetGangster

+0

SweetGangster, ¿me puede dar el mensaje de error exacto? –

Cuestiones relacionadas