2011-03-25 52 views

回答

5

是的,只要你有权限。如果您有Linked Server设置,您也可以执行跨服务器。

跨数据库实例:

SELECT * FROM localTable as lt 
INNER JOIN otherDB.dbo.OtherTable as ot 
ON lt.ID = ot.id 

跨服务器为例(假设您已经创建了链接服务器):

SELECT * FROM localTable as lt 
INNER JOIN ServerName.otherDB.dbo.OtherTable as ot 
ON lt.ID = ot.id 
+0

hrm,好吧。数据库位于不同的服务器上,我没有链接的服务器。我想我不能那么做。 – Tony 2011-03-25 18:29:49

+2

@Tony如果你的数据存在于不同的服务器上,那么你将不得不建立一个链接服务器或移动数据。对您的环境一无所知,但我们有一套工作,每天晚上将一小部分仓库数据复制到应用程序服务器,以便我们可以访问我们所有的公共数据(客户端列表等)。应用程序,而不必重新键入事物或将所有地方的服务器连接起来。我们使用SSIS来移动数据。 – Rozwel 2011-03-25 18:41:04

+0

啊,好的。谢谢。感谢大家。 – Tony 2011-03-25 18:42:25

3

是的。只需使用3部分命名语法database_name.schema_name.table_name即可。

您还需要启用跨数据库所有权链接。 (不推荐)或使用this approach.

1

使用完全限定的表名。例如,如果你在数据库基础知识,并希望访问数据库XYZ表的表,访问它XYZ.dbo.table (这可能是DBO或别的东西取决于表的所有者,通常是DBO)

+0

应该注意,从SQL Server 2005以来,架构和所有者并不是一回事。在我们的许多应用数据库中,我们使用架构来区分用户数据和应用程序元数据。在我们的仓库环境中,我们使用模式来识别相关的表/过程,以便我们可以轻松地将安全性应用于对象组。我很少看到他们用来识别物体所有者。 – Rozwel 2011-03-25 18:24:58

1

试试像下面这样:

SELECT a.userID, b.usersFirstName 
FROM databaseA.dbo.TableA a 
INNER JOIN database B.dbo.TableB b ON a.userID = b.userID 

来源:http://forums.asp.net/t/1254974.aspx

+0

如果您发布代码,XML或数据样本,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)以精确格式化并语法突出显示它!如果您发布错误消息,请**使用blockquotes('“')正确格式化错误消息。 – 2011-03-25 18:25:33

0

另外一个技术,在某些环境中更好地工作是定义一个同义词远程表。这可以让你有一个指向远程对象的本地引用。如果您处于必须迁移事物的环境中,并且从一个环境到另一个环境的相对位置可能不一样,那么此功能尤其有用。这里有一个快速概览:

http://blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/

相关问题