¿Cómo crear Sql Sinónimo o "Alias" para el nombre de la database?

Estoy usando ms sql 2008 e bash crear un nombre de database que haga reference a otra database. Por ejemplo, 'Dev', 'Test', 'Demo' serían nombres de bases de datos a los que podría hacer reference desde mis múltiples files de configuration, pero cada nombre apuntaría a otra database como 'db20080101' o 'db20080114'.

[Editar] Algunas de las configuraciones son para aplicaciones que yo controlo el código y otras no (por ejemplo, configuration de file de fuente de datos del service MS Reporting) [/ Edit]

Parece que sqlserver solo admite sinónimos para View, Table, Sproc o Function. 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?

use notación de 3 partes y alias hasta la tabla, ejemplo

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

He hecho algo similar a esto usando otro file de configuration.

El nuevo file de configuration correlaciona su nombre genérico con toda la información necesaria para conectarse a esa database (nombre db, nombre de usuario, contraseña, etc.) y luego su function de connection toma su nombre genérico como argumento.

db.config:

 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 

código de connection:

 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; } 

Luego, simplemente llame a get_connection () con su alias db como argumento.

Hay una manera de simular esto usando un server vinculado. Esto supone que tiene dos serveres SQL con el mismo set de bases de datos, uno para desarrollo / testing y otro en vivo.

  1. Abra SQL Server Management Studio en su server de desarrollo / testing
  2. Haga clic derecho en Objetos del Servidor> Servidores Vinculados
  3. Seleccione Nuevo server vinculado …
  4. Seleccione la página General
  5. Especifique el nombre de alias en el campo Servidor vinculado: este sería normalmente el nombre de su server en vivo
  6. Seleccione SQL Native Client como proveedor
  7. Ingrese sql_server para el nombre del producto
  8. En origen de datos, especifique el nombre del server de desarrollo
  9. Agregue opciones de security y server al gusto
  10. Haga clic en Aceptar

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

Una vez que haya hecho eso, puede escribir SQL de esta manera:

 SELECT * FROM liveservername.databasename.dbo.tablename 

Ahora, cuando las secuencias de commands se ejecutan en el server de desarrollo con el server vinculado de nuevo a sí mismos, funcionarán correctamente extrayendo datos del server de desarrollo y, cuando se ejecuten exactamente los mismos guiones en el server en vivo, funcionarán normalmente.

Sé que esto probablemente no ayudará en todas las situaciones, pero aún tienes la opción de usar vistas. Puede insert, eliminar, actualizar, seleccionar en una vista, siempre que tenga una key de identidad adecuada (key principal). Si lo dirige a otra database, debe soltar y volver a crear para get el esquema diferente (en caso de que esté trabajando entre producción y testing mientras realiza cambios en el esquema en testing y / o producción).

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