如何创建联接?

时间:2010-07-09 04:43:38

标签: c# sql-server

这可能吗:

  1. 将表连接到一个服务器的两个数据库中?

    1.1我应该使用什么连接字符串?

  2. 将表连接到不同服务器的两个数据库中?

    2.1我应该使用什么连接字符串?

4 个答案:

答案 0 :(得分:4)

如果我没记错的话,你可以用以下方式做到这一点:

select * from [database name].[owner].table_name a
inner join [database_name].[owner].table_name b on (a.id = b.a_id)

如果数据库位于另一台服务器上,则必须先创建链接服务器:

USE master 
GO
EXEC sp_addlinkedserver 
'RemotDB',
N'SQL Server'
GO

当链接服务器时,您可以使用以下语法引用另一台服务器上的表:

[server_name].[database_name].[owner].table_name

答案 1 :(得分:1)

不确定OpenQuery是什么,但我已经完成了两种情况。只需使用完全限定名称。

1:

SELECT * 
FROM SpecificDatabase.dbo.SpecificTable spec
INNER JOIN CommonDatabase.dbo.CommonTable comm ON spec.someField = comm.someField

2 :(设置链接服务器对象)

SELECT * 
FROM SpecificDatabase.dbo.SpecificTable spec
INNER JOIN LinkedServer.CommonDatabase.dbo.CommonTable comm ON spec.someField = comm.someField

对于连接字符串,您只是指的是From和Join子句中的内容,还是指代码中的连接字符串值?

答案 2 :(得分:1)

没有人回答你关于连接字符串的问题,所以我会跳到这里。如果您有2台服务器A和B,则可以在服务器A上设置指向服务器B的链接服务器(如其他帖子中所详述)。然后,在查询中引用服务器B的服务器A上运行查询(再次在其他帖子中详细说明)。您正在服务器A上运行此查询,因此您的连接字符串将是服务器A。

确保连接字符串中的用户有权访问两台服务器上的查询中的表。如果没有,则可以使用sp_addlinkedsrvlogin系统存储过程将链接服务器设置为始终使用一组特定凭据。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms189811.aspx

答案 3 :(得分:0)

我正在使用sql server

使用OpEnQueryOPENROWSET将解决您的问题。

第1步:

EXEC sp_addlinkedserver
    @server = 'TEST',
    @srvproduct = 'SQLServer OLEDB Provider',
    @provider = 'SQLOLEDB',
    @datasrc = 'InfoNet'

第2步: 例如:

SELECT loc.OrderID, loc.ProductID, rmt.ProductName
FROM [Order Details] loc INNER JOIN 
OPENQUERY(InfoNet, 'SELECT * FROM Northwind.dbo.Products') rmt
    ON loc.ProductID = rmt.ProductID