2013-03-19 75 views
2

我和我的小項目工作,並停止在這一點上 我有2臺SQL服務器,一臺 - 是部門的SQL Server(只讀)和我的複製本地服務器。 在VB.net我打開連接與ADODB的lib 如何連接到2個不同的SQL服務器VB.NET

connectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Work;Data Source=server1\SQLEXPRESS" 
     ginfo = "Select * From base1.dbo.table1 " 
     cn = New ADODB.Connection 
     rs = New ADODB.Recordset 
     cn.Open(connectionString) 
     rs.Open(ginfo, cn, ADODB.CursorTypeEnum.adOpenStatic) 
     i = 0 
     With rs 
      If rs.BOF = False Then 
       Do While Not .EOF 
        ReDim Preserve users(i) 
        users(i).name = rs.Fields(2).Value 
        lb_sfio.Items.Add(users(i).name) 
        i = i + 1 
        .MoveNext() 
       Loop 
      End If 
     End With 

所以下一階段連接到第二個服務器和獲取信息,從另一臺服務器 文字類同。 但是,我很有趣,因爲在我的變異與2個服務器與SQL腳本語言 是如何工作的,例如

ginfo = "SELECT * FROM srv1.bs1.dbo.tbl1 EXCEPT SELECT * FROM srv2.bs1.dbo.tbl1" 

是太慢。 也許第二個問題是如何在沒有完全比較的情況下在數據庫中找到更新(db有4k字符串,這很無聊)。

回答

5

您可以將Server2作爲linked server添加到Server1

然後,你就Server1查詢將如下所示:

use base1 
SELECT field1 FROM table1 EXCEPT SELECT field1 FROM server2.base1.dbo.table1 

但是你應該知道的performance implications與對鏈接服務器的查詢。

的鏈接過程需要在Server1ALTER ANY LINKED SERVER權限。在查詢之前,您不必每次重複此操作,鏈接的服務器都會一直保留,直到被刪除。

+0

這是完全工作,如果我有隻讀帳戶? 的sp_addlinkedserver [@服務器=] '服務器'[[@ srvproduct =] 'PRODUCT_NAME'] [[@提供商=] 'PROVIDER_NAME'] [[@ DATASRC =] 'DATA_SOURCE'] [[@位置= '位置'] [[@ provstr =] 'provider_string的'] [[@目錄=] '目錄'] 此代碼必須運行總是該起始我的程序,或僅1中MSSQL時間? – user2185412 2013-03-19 08:19:47

+0

您將需要一個DBA配置只讀服務器上的鏈接...或者你CASN在1個方向的鏈接 - 例如,Server2上可以使用'Server1.Db.dbo.T'但Server1上無法做'Server2.Db .dbo.T'。只有一次 – Basic 2013-03-19 08:20:51

+0

好。謝謝。我正在嘗試,然後再寫 – user2185412 2013-03-19 08:24:25