2017-10-14 18 views
0

J'ai dix à vingt bases de données sur mon serveur. Chaque fois que j'ai besoin d'interroger je veux mettre quelque chose comme çaComment raccourcir ou alias les noms de bases de données dans votre requête?

Select * from otp-devices.dbo.deviceid 
select module from mr1ghp/security.dbo.alarmmodlink 

Nos noms de bases de données sont longs. Est-il possible de raccourcir ou le nom de la base de données d'alias dans la requête otp-devicesmr1ghp/security

+0

Je ne comprends pas votre question. Premièrement, 'otp-devices.dbo.deviceid' n'est pas un nom valide pour une base de données. Il se rapproche d'une référence de table (mais le trait d'union est incorrect). Quel est votre problème? Beaucoup de bases de données ou beaucoup de tables? –

+0

@GordonLinoff. dbo est un schéma et deviceid est une table. – coffemug

+0

@GordonLinoff, a mis à jour la question – coffemug

Répondre

2

Vous pouvez faire un alias avec le mot-clé AS comme ceci:

SELECT * FROM `otp-devices.dbo.deviceid ` AS otp 
+0

Cela est vrai pour une requête. mais j'ai vu un moyen de le faire à partir du niveau de base de données lui-même. c'est-à-dire que nous pouvons utiliser ce nom pour notre nom de base de données partout dans notre serveur sql. – coffemug

+0

@coffemug il n'y a rien de tel dans SQL Server. Sauf peut-être des variables sqlcmd. –

1

Depuis SQL Server 2008, SQL Server a pris en charge des synonymes.

Vous pouvez en savoir plus sur la syntaxe here.

Vous pouvez lire sur les idées here.

Je ne suis pas vraiment fan des synonymes. Je trouve les bases de données plus difficiles à naviguer lorsque le même objet a des noms différents à différents endroits - et je ne peux pas facilement voir le mapping (comme avec les alias dans une seule requête).

+0

Les synonymes ne sont pas pris en charge pour les noms de base de données –

+0

@MartinSmith. . . Mais ils sont pris en charge pour les noms de table, ce qui peut encore aider le PO, en quelque sorte. –

+0

@GordonLinoff. oui – coffemug

-1

Une autre possibilité consiste à utiliser des vues pour fournir le lien vers des tables d'autres bases de données. Utilisez les conventions de dénomination pour identifier la base de données à laquelle la vue est liée. Cela permet également d'isoler le code de toute modification apportée aux noms de bases de données.

CREATE VIEW vOD_deviceid AS SELECT * FROM [otp-devices].dbo.deviceid ; 

et

CREATE VIEW vSC_alarmmodlink AS SELECT * FROM mr1ghp/security.dbo.alarmmodlink 

Ensuite ailleurs

SELECT * FROM vOD_deviceid; -- OD prefix identifies the database 
SELECT module FROM vSC_alarmmodlink; 

substituez simplement le nom de vue où que vous auriez utilisé le plein database.schema.tablename.

+0

Cela peut être fait pour des requêtes répétitives, et j'ai quelques vues dans le but mais la plupart du temps notre exigence change et nous n'avons pas une requête particulière pour notre but – coffemug

+0

Je veux dire qu'une fois que vous avez défini la vue de base du table, vous utilisez toujours la vue au lieu de vous référer directement à la table, même dans d'autres vues. La vue est donc la représentation locale unique de la table dans l'autre base de données.Vous ne créez pas une vue différente pour chaque requête que vous avez, ce qui irait à l'encontre de l'objectif. – JohnRC