2010-07-09 96 views
1

這是可能的:如何創建連接?

  1. 連接表在兩個數據庫中的一臺服務器?

    1.1應我所用的連接字符串?

  2. 連接表在不同的服務器上的兩個數據庫?

    2.1應我所用的連接字符串?

回答

0

我使用的是SQL服務器

不是使用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 
4

如果我沒記錯的話,你可以做的是,在follwoing時尚:

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

不知道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 

對於連接字符串,你只是指發生的事情在從和加入條款或你的意思代碼中的連接字符串值?

1

沒有人回答了你關於連接字符串的問題,所以我會在這裏跳。如果您有2臺服務器A和B,則可以在服務器A上設置指向服務器B的鏈接服務器(詳見其他帖子)。然後,在查詢中引用服務器B上的查詢(在其他帖子中詳細說明),然後運行查詢。您正在運行在服務器A上此查詢,讓您的連接字符串將是服務器A

確保用戶在連接字符串中已被授權訪問兩個服務器上的查詢表。如果不是,則可以使用sp_addlinkedsrvlogin系統存儲過程將鏈接服務器設置爲始終使用特定的一組憑據。進一步的細節見http://msdn.microsoft.com/en-us/library/ms189811.aspx