有没有办法在数据库中创建链接到不存在的表的视图?创建视图到不存在的表
我们刚刚发现一个数据导入程序已经失败,因为一个相当大的升级,它意外删除视图的一段时间。
(在数据库中对我们的产品,托管客户端服务器上)的观点是有联系的一个表中我们的客户数据库之一,并通过我们的客户创造为宗旨。
意外删除此视图是由于数据库更改的数量(包括视图的创建和删除)以及SQL比较工具将删除特定于客户端的视图的事实而被忽略。
因此,能够在我们的本地开发数据库上创建此视图的副本(对客户端表的完全限定名称,我们显然无法访问到实时环境之外),这将非常有用。这不会再发生。
(有问题的客户正在运行SQL Server 2008,但是这是一种产品,也是在其他客户的2005环境中运行的,所以2005年的答案是可取的,但如果它是2008年的具体情况不是问题)
更新:
要回复@达的评论...
我明白你在说什么,并创建被链接到一个空表这个观点会很有意义。
不幸的是有问题的表托管不仅在不同的数据库,但不同的SQL服务器上。这意味着我将在我们的所有开发机器上创建一个新的服务器实例,以便托管这个空表。而且我必须在很多客户端上这样做,导致很多实际上未使用的服务器实例。
我真的希望能够避免这种情况,而是能够创建视图(显然会在我们的开发环境中失败),但不会在未来再次被意外删除。
更新2
什么@Damien说我已经考虑并实施这一使用Linked Server
...看到我的回答更多细节
为什么不能创建这些表的(空)副本? –
因为@Damien会涉及到创建一个新的服务器实例,一个新的数据库和一个新的表......所有这些我都不是特别喜欢这样做。我希望在创建时出现某种“覆盖”命令,告诉SQL Server“不要打扰检查是否存在,只是假设它存在”。我猜不是,但我只是希望 – freefaller
这个问题没有好的解决方案,但你可以注释本地VIEW中的“FROM”部分和空值字段值(例如“SELECT NULL AS ClientField1,NULL AS ClientField2,etc/* FROM foo */WHERE ClientField1> X ORDER BY ClientField2“,或者更糟糕的是,创建一个名称为圆点的表,并在本地系统中引用该表(如名为”ClientPC.dbo.ClientTableName “,并在视图中提到这一点,不要将其作为答案张贴,因为可能有更好的解决方案,但我不知道,可悲的是, – 2013-09-23 12:35:51