2011-03-25 6 views

Répondre

5

Oui, tant que vous disposez des autorisations. Vous pouvez également faire un serveur croisé si vous avez une configuration Linked Server.

Cross DB Exemple:

SELECT * FROM localTable as lt 
INNER JOIN otherDB.dbo.OtherTable as ot 
ON lt.ID = ot.id 

exemple Cross Server (suppose que vous avez créé le serveur lié):

SELECT * FROM localTable as lt 
INNER JOIN ServerName.otherDB.dbo.OtherTable as ot 
ON lt.ID = ot.id 
+0

HRM, d'accord. Les bases de données sont sur les différents serveurs et je n'ai pas le serveur lié. Je suppose que je ne peux pas vraiment faire ça alors. – Tony

+2

@Tony Si vos données résident sur des serveurs différents, vous devrez soit créer un serveur lié, soit déplacer les données. Vous ne savez rien de votre environnement, mais nous avons un ensemble de tâches qui reproduisent une petite partie de nos données d'entrepôt vers les serveurs d'applications tous les soirs afin que nous ayons accès à certaines données communes (listes de clients, etc.) dans tous nos applications sans avoir à redéfinir les choses ou avoir des serveurs liés partout. Nous utilisons SSIS pour déplacer les données. – Rozwel

+0

ah, d'accord. Merci. Merci tout le monde. – Tony

3

Oui. Il suffit d'utiliser la syntaxe de nommage en 3 parties database_name.schema_name.table_name.

Vous devez également activer soit la propriété chaînage de base de données croisée. (Non recommandé) ou utiliser this approach.

1

Utilisez le nom complet de la table. Par exemple, si vous êtes dans la base de données ABC et voulez accéder à la table de la base de données XYZ, accédez-y XYZ.dbo.table (Cela peut être dbo ou autre chose selon le propriétaire de la table, habituellement c'est dbo)

+0

Notez que le schéma et le propriétaire n'ont pas été la même chose depuis SQL Server 2005. Dans la plupart de nos bases de données d'applications, nous utilisons des schémas pour différencier les données utilisateur des métadonnées des applications. Dans nos environnements d'entrepôt, nous utilisons des schémas pour identifier les tables/procs liés afin que nous puissions facilement appliquer la sécurité au groupe d'objets. Je les vois rarement utilisés pour identifier les propriétaires d'objets. – Rozwel

1

Essayez quelque chose comme ce qui suit:

SELECT a.userID, b.usersFirstName 
FROM databaseA.dbo.TableA a 
INNER JOIN database B.dbo.TableB b ON a.userID = b.userID 

Source: http://forums.asp.net/t/1254974.aspx

+0

Si vous postez du code, des échantillons XML ou des données, ** mettez en surbrillance ces lignes dans l'éditeur de texte et cliquez sur le bouton "échantillons de code" dans la barre d'outils de l'éditeur pour les mettre en surbrillance! Si vous envoyez des messages d'erreur, ** veuillez ** utiliser les blockquotes ('" ') pour formater correctement le message d'erreur. –

0

une autre technique qui fonctionne mieux dans certains environnements est de définir un synonyme de la table distante. Cela vous permet d'avoir une référence locale qui pointe vers l'objet distant. Particulièrement utile si vous vous trouvez dans un environnement où vous devez migrer des objets et où les emplacements relatifs peuvent ne pas être les mêmes d'un environnement à l'autre. Voici un aperçu rapide:

http://blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/

Questions connexes