我可以用视图(同名)替换表吗?

Posted

技术标签:

【中文标题】我可以用视图(同名)替换表吗?【英文标题】:Can I replace table with a view (of same name).? 【发布时间】:2010-12-15 23:50:28 【问题描述】:

我有 2 个数据库....a & b

我在这两个数据库中都有表“t”。

现在我正在从数据库“b”中删除表 t。

我在 数据库“b”...这个视图引用了数据库“a”中的表“t”。

我有一个 dotnet 应用程序..它指向数据库“b”。它具有内联查询.... 那么我可以在内联查询中留下像“b.t”这样的引用吗? 我的意思是现在它会引用视图“t”而不是表“t”吗?

【问题讨论】:

注意外键并确保存储过程和其他元素可以使用视图而不是表。 【参考方案1】:

是的,但是您要替换的表必须先被删除或重命名——只有一个对象可以使用该名称。

用途:

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

唯一需要注意的是 B 数据库中的用户可能需要被授予 SELECT 权限:

GRANT SELECT ON b.dbo.t TO user

理想情况下,创建一个角色,然后将 SELECT 授予该角色,然后您可以将其添加到用户中。

【讨论】:

我的问题不是如何创建视图...如果我创建一个与已删除表同名的视图。我是否必须更改存储过程/内联查询中的任何引用? @Anish:只要列名和它们的数据类型匹配,一切都会好起来的,但重新编译 SP/etc 不会有什么坏处。 不,您不必更改引用,只要它们在同一架构名称集中即可 @ OMG => 你的意思是“但重新编译 SP/etc 不会有坏处。” @Anish:在 Management Studio 中,右键单击 SP,单击“刷新”。等等。

以上是关于我可以用视图(同名)替换表吗?的主要内容,如果未能解决你的问题,请参考以下文章

同名的物化视图和表

用自己的视图替换状态栏

django url 反响解析,视图

MySql 5.0 可以查看位于另一台服务器上的表吗

有没有办法替换视图?

替换视图时可可窗口的大小翻倍