2013-09-23 58 views
1

有没有办法在数据库中创建链接到不存在的表的视图?创建视图到不存在的表

我们刚刚发现一个数据导入程序已经失败,因为一个相当大的升级,它意外删除视图的一段时间。

(在数据库中对我们的产品,托管客户端服务器上)的观点是有联系的一个表中我们的客户数据库之一,并通过我们的客户创造为宗旨。

意外删除此视图是由于数据库更改的数量(包括视图的创建和删除)以及SQL比较工具将删除特定于客户端的视图的事实而被忽略。

因此,能够在我们的本地开发数据库上创建此视图的副本(对客户端表的完全限定名称,我们显然无法访问到实时环境之外),这将非常有用。这不会再发生。

(有问题的客户正在运行SQL Server 2008,但是这是一种产品,也是在其他客户的2005环境中运行的,所以2005年的答案是可取的,但如果它是2008年的具体情况不是问题)


更新:

要回复@达的评论...

我明白你在说什么,并创建被链接到一个空表这个观点会很有意义。

不幸的是有问题的表托管不仅在不同的数据库,但不同的SQL服务器上。这意味着我将在我们的所有开发机器上创建一个新的服务器实例,以便托管这个空表。而且我必须在很多客户端上这样做,导致很多实际上未使用的服务器实例。

我真的希望能够避免这种情况,而是能够创建视图(显然会在我们的开发环境中失败),但不会在未来再次被意外删除。


更新2

什么@Damien说我已经考虑并实施这一使用Linked Server ...看到我的回答更多细节

+1

为什么不能创建这些表的(空)副本? –

+0

因为@Damien会涉及到创建一个新的服务器实例,一个新的数据库和一个新的表......所有这些我都不是特别喜欢这样做。我希望在创建时出现某种“覆盖”命令,告诉SQL Server“不要打扰检查是否存在,只是假设它存在”。我猜不是,但我只是希望 – freefaller

+1

这个问题没有好的解决方案,但你可以注释本地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

回答

0

正如@马克在his comment under my question说,它似乎不可能与view做到这一点。 (stored procedures存在“延迟名称解析”,但不存在views)。

我周围的方式是大致按照@Damien's suggestion的方式在我的开发机器上创建一个新实例,纯粹用于这些“客户特定的空表”。

然后我创建了一个Linked Server对象到这个新的实例与客户端服务器名称(以创建Linked Server对象使用this answer on SO)的别名,在实例我创建适当命名的数据库,并适当命名表。

这个新实例的服务已经设置为手动启动,所以它不应该占用资源 - 我可以在需要时为任何未来的工作启动并运行它。

的结果是,我现在已经在我的开发数据库问题view,它“比较”正好与我们的客户数据库中的view ...所以它永远不会(理论上)被删除作为升级的一部分再次。