2009-01-14 15 views
27

Estoy usando ms sql 2008 e intento crear un nombre de base de datos que haga referencia a otra base de datos. Por ejemplo, 'Dev', 'Test', 'Demo' serían nombres de bases de datos a los que podría hacer referencia desde mis múltiples archivos de configuración, pero cada nombre apuntaría a otra base de datos como 'db20080101' o 'db20080114'.Cómo crear Sql Sinónimo o "Alias" para el nombre de la base de datos?

[Editar] Algunas de las configuraciones son para aplicaciones que yo controlo el código y algunos no lo son (ej. MS Reporting configuraciones de archivos servicio de fuente de datos) [/ editar]

Parece que sólo es compatible con SQL Server sinónimos de Ver, Tabla, Sproc o Función. Y Alias ​​'son para nombres de tabla y columna.

¿Hay alguna manera de hacer esto que me perdí en los documentos? ¿Alguien tiene alguna sugerencia sobre una solución alternativa?

+2

+1. En nuestro caso, tenemos que hacer una llamada de DB a DB; el servidor de destino difiere en función de la Prueba frente a la Producción, y no queremos tener que recordar siempre cambiar todas las referencias con cada versión – STW

Respuesta

4

uso de 3 partes notación y alias hasta la mesa, ejemplo

select * from tempdb.dbo.sysobjects a 
join master.dbo.sysobjects b on a.id = b.id 
+0

intenté esto para una de las tablas y funcionó gr comer. sin embargo, creo que tendría que crear un sinónimo en el nuevo db para cada tabla, función, vista y sproc en el db original? Tengo 5 o 6 archivos de configuración, así que creo que cambiarlos será menos costoso. –

1

que he hecho algo similar a esto utilizando otro archivo de configuración.

El nuevo archivo de configuración asigna su nombre genérico a toda la información necesaria para conectarse a esa base de datos (nombre db, nombre de usuario, contraseña, etc.) y luego su función de conexión toma su nombre genérico como argumento.

db.config: Código

DEV_DB_NAME = db20080101 
DEV_DB_USER = dev_user 
DEV_DB_PASS = dev_pass 
TEST_DB_NAME = db20070101 
TEST_DB_USER = test_user 
TEST_DB_PASS = test_pass 

conexión:

db_connection get_connection(string prefix) { 
    db_connection db_conn = new db_connection; 
    string db_name = get_config_value(config_path, prefix + "_DB_NAME"); 
    string db_user = get_config_value(config_path, prefix + "_DB_USER"); 
    string db_pass = get_config_value(config_path, prefix + "_DB_PASS"); 

    db_conn.connect(db_name, db_user, db_pass); 

    return db_conn; 
} 

A continuación, sólo llamar get_connection() con su alias db como argumento.

+0

buena idea, pero algunas de las aplicaciones en uso no son mías y no puedo controlar cómo generan la cadena de conexión (es decir, MS Reporting Services). Acabo de actualizar mi pregunta para reflejar esto. –

+0

Sí, esto solo funcionará cuando controlas el código. Buena suerte para encontrar su respuesta, publíquela aquí si lo hace. –

1

Hay una manera de simular esto utilizando un servidor vinculado. Esto supone que tiene dos servidores SQL con el mismo conjunto de bases de datos, uno para desarrollo/prueba y otro en vivo.

  1. Abra SQL Server Management Studio en el servidor de desarrollo/prueba
  2. derecha objetos Haga clic servidor> Servidores vinculados
  3. Seleccione Nuevo servidor vinculado ...
  4. Seleccione la página General
  5. Especificar alias nombre en el campo de servidor vinculado - esto sería normalmente el nombre de su vivo servidor
  6. Seleccione SQL Native Client como el proveedor
  7. Introduzca sql_server de Nombre del producto
  8. En origen de datos, especifique el nombre del servidor de desarrollo servidor
  9. Añadir Seguridad y opciones de servidor al gusto
  10. Haga clic en OK

Lo anterior es para SQL Server 2005, pero debería ser similar para 2008

Una vez que hayas hecho esto se puede escribir SQL como esto:

SELECT * FROM liveservername.databasename.dbo.tablename 

Ahora cuando sus scripts se ejecutan en el servidor de desarrollo con el servidor vinculado de nuevo funcionarán correctamente extrayendo datos del servidor de desarrollo y cuando los mismos scripts se ejecutan en el servidor en vivo, funcionarán normalmente. ly.

+1

Esto requiere nuevamente un nombre de base de datos codificado. –

0

Sé que esto probablemente no ayude en todas las situaciones, pero aún tiene la opción de usar vistas. Puede insertar, eliminar, actualizar, seleccionar en una vista, siempre que tenga una clave de identidad adecuada (clave principal). Si lo dirige a otra base de datos, debe soltar y volver a crear para obtener el esquema diferente (en caso de que esté trabajando entre producción y prueba mientras realiza cambios en el esquema en prueba y/o producción.

Los sinónimos son útiles para cuando va a otra base de datos y tiene un nombre de 3 o 4 partes, pero cuando desea hacerlo para que pueda tener un nombre de conjunto, también funcionará un servidor vinculado que le permitirá usar un nombre fijo si los nombres de la tabla son las mismas en ambas bases de datos y usted solo señala entre prod y test.

Cuestiones relacionadas