web-dev-qa-db-fra.com

SQL Server 2008 Possibilités d'avoir des vues d'une base de données dans une autre base de données?

J'ai une base de données de fournisseurs de je veux extraire et transformer certaines informations. Comme je ne veux pas changer la structure de la base de données d'origine en raison de la licence, je vous me demandais si je peux associer des vues de la base de données du fournisseur, mais que vous stockez ceux dans une deuxième base de données SQL Server 2008 avec quelques autres données répliquées et transformées. La deuxième base de données est censée vivre à côté du premier sur le même serveur.

Est-il possible d'avoir des points de vue comme celui-ci et, si oui, est-ce que je perds beaucoup de performances lorsque vous interrogez les vues?

6
FishHead

La licence ne devrait pas vous empêcher d'ajouter des vues à votre première base de données. Chaque endroit où j'ai été utilisé a des objets personnalisés pour les rapports, etc. qui prolongent la fonctionnalité du produit tiers.

En disant cela, il est possible de disposer de 3 noms d'objet à part en vues dans votre propre base de données

CREATE VIEW myview 
AS
SELECT ... FROM TheirDB.dbo.TheirTable
GO
4
gbn

Oui, c'est ce que fait la nommage de trois parties.

Utilisez le formulaire: [Databasename]. [DatabaseIhale]. [Nom du nom] Lorsque vous référencez vos tables de fournisseur. c'est à dire:

CREATE View [ViewName]
AS
SELECT * FROM [VendorDB].[dbo].[TableName]

En ce qui concerne la performance, il n'y a pas de gros impact sur la performance, si le tableau dispose d'index et de statistiques appropriés, ceux-ci seront utilisés par vos requêtes dans votre DB.

Remarque: Si vous spécifiez un indice d'index dans votre requête, ceux-ci seront ignorés, à moins que vous ignoriez la vue et renvoyer directement la table.

Emplacement de votre DB
Comme Stan a noté, le ci-dessus suppose que les deux bases de données résident sur la même instance SQL Server, si vous souhaitez avoir une vue de résidoi dans une autre instance SQL différente (et je le fais non Recommandez ceci), vous pouvez:

  1. Configurez un serveur lié au fournisseur dB
  2. Utilisez une nommée à quatre parties dans votre vue Définition: [LinkedServername]. [DatabasEname]. [Beaechip Natury]. [Nom]

c'est à dire:

CREATE View [ViewName]  
AS  
SELECT * FROM [VendorDBInstance].[VendorDB].[dbo].[TableName]
10
Andrew Bickerton