SQL Server 2008 在另一个数据库中拥有来自一个数据库的视图的可能性?

Fis*_*ead 6 sql-server-2008

我有一个供应商数据库,我想从中提取和转换某些信息。由于我不想因许可而更改原始数据库的结构,因此我想知道是否可以将供应商数据库中的视图放在一起,但将它们与其他一些复制和转换的数据一起存储在第二个 sql server 2008 数据库中。第二个数据库应该位于同一服务器上的第一个数据库旁边。

是否可能有这样的视图,如果是这样,在查询视图时我会失去很多性能吗?

And*_*ton 10

是的,这可能是三部分命名的目的。

引用供应商表时,请使用以下格式:[DatabaseName].[DatabaseOwner].[TableName]。IE:

CREATE View [ViewName]
AS
SELECT * FROM [VendorDB].[dbo].[TableName]
Run Code Online (Sandbox Code Playgroud)

关于性能,没有太大的性能影响,如果表具有适当的索引和统计信息,您的数据库中的查询将使用这些数据。

注意:如果您在查询中指定索引提示,这些将被忽略,除非您绕过视图并直接引用表。

您的数据库的位置
正如 Stan 所指出的,上面假设两个数据库驻留在同一个 SQL Server 实例上,如果您希望视图驻留在不同的 SQL 实例中(我建议这样做),您可以:

  1. 为供应商数据库设置链接服务器
  2. 在视图定义中使用四部分命名:[LinkedServerName].[DatabaseName].[DatabaseOwner].[TableName]

IE:

CREATE View [ViewName]  
AS  
SELECT * FROM [VendorDBInstance].[VendorDB].[dbo].[TableName]
Run Code Online (Sandbox Code Playgroud)


gbn*_*gbn 4

许可不应阻止您向第一个数据库添加视图。我去过的每个地方都有用于报告等的自定义对象,这些对象扩展了第 3 方产品的功能。

也就是说,您自己的数据库中的视图中可以有 3 部分对象名称

CREATE VIEW myview 
AS
SELECT ... FROM TheirDB.dbo.TheirTable
GO
Run Code Online (Sandbox Code Playgroud)