2010-12-15 419 views
3

J'ai 2 bases de données .... a & bPuis-je remplacer la table par une vue (du même nom)?

J'ai la table "t" dans ces deux bases de données.

Maintenant, je supprime la table t de la base de données "b".

Je crée une vue "t" (voir que le nom de vue est le même que la table supprimée) dans base de données "b" ... et cette vue référant la table "t" dans la base de données "a".

J'ai une application dotnet qui pointe vers la base de données "b". Il a des requêtes en ligne .... Donc, je peux laisser la référence comme ceci "b.t" dans les requêtes en ligne. Je veux dire maintenant va-t-il se référer à la vue "t" au lieu de la table "t"?

Répondre

5

Oui, mais la table que vous cherchez à remplacer doit être supprimée ou renommée en premier - un seul objet peut avoir le nom.

Utilisation:

CREATE VIEW b.dbo.t AS 
    SELECT a.* 
    FROM a.dbo.t a 

La seule réserve est les utilisateurs du B datbase pourraient devoir accorder le privilège SELECT:

GRANT SELECT ON b.dbo.t TO user 

Idéalement, créer un rôle, puis GRANT SELECT le rôle que Vous pouvez ensuite ajouter des utilisateurs.

+0

Ma question n'est pas comment créer vue ... Si je crée une vue avec le même nom que la table supprimée. Dois-je modifier des références dans mes requêtes de procédure stockée/inline? – Relativity

+0

@Anish: Tant que les noms de colonnes et leurs types de données correspondent, tout devrait bien se passer mais la recompilation du SP/etc ne peut pas nuire. –

+0

Non, vous ne devez pas changer les références, tant qu'elles sont dans le même jeu de noms de schéma –