Puis-je utiliser une procédure stockée pour sélectionner des enregistrements de différentes bases de données (en SQL)? J'ai une table de chaque base de données et je veux les rejoindre.Procédure stockée pour différentes bases de données
Merci.
Puis-je utiliser une procédure stockée pour sélectionner des enregistrements de différentes bases de données (en SQL)? J'ai une table de chaque base de données et je veux les rejoindre.Procédure stockée pour différentes bases de données
Merci.
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
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.
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)
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
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
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. –
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:
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
@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
ah, d'accord. Merci. Merci tout le monde. – Tony