我可以用视图(同名)替换表吗?
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,单击“刷新”。等等。以上是关于我可以用视图(同名)替换表吗?的主要内容,如果未能解决你的问题,请参考以下文章