2010-09-07 34 views
1

我需要從遠程數據庫中檢索一些數據,它是一種「更新管理器」,因此我的應用程序將連接到該遠程服務器以檢查是否有新更新。爲了執行遠程查詢,創建和刪除鏈接服務器時會出現哪些問題?

我使用網絡服務器來做「握手和驗證」工作,但後來我直接連接到遠程sql服務器來檢索數據。

網絡服務器將返回登錄信息(serverIP +端口,數據庫,用戶和密碼),當然用戶只是具有datareader(在表的子集上)權限的用戶。

我需要做的是執行一些遠程查詢來檢索所需的數據。這是我寫的(和它的作品):

CREATE PROCEDURE QueryRemoteServer 
     (@SERVER nvarchar(50),@FieldNames nvarchar(500), @DB nvarchar(50), 
     @Tablename nvarchar(100), @Login Nvarchar(50),@pwd Nvarchar(50)) 
AS 
BEGIN 
    /* Creation of Linked Server including the If exists check */ 
    if exists (Select name From sys.servers Where [Name][email protected]) 
    exec sp_dropserver @SERVER, 'droplogins' 
    exec sp_addlinkedserver @SERVER 
    /* Creation of the login according to values returned from webserver */ 
    exec sp_addlinkedsrvlogin @SERVER, 'FALSE', NULL, @Login, @pwd 
    /* exec the query (for simplicity I omitted the JOIN job) */ 
    exec ('SELECT ' + @FieldNames + 
      ' FROM ['+ @Server + '].' + @Db + '.dbo.' + @Tablename) 
    /* drop the created linked server */ 
    exec sp_dropserver @SERVER, 'droplogins' 
END 

客戶將只需像這樣運行的東西:

exec QueryRemoteServer '127.0.0.1 , 4455','Field1, Field2', 
      'MyRemoteDB','MyRemoteTable','GuestUser','GuestPassword' 

你能告訴我你的opionions對這種做法,告訴我這是你看到的主要缺點/好處?

+0

我會看到的一個問題是,在他或她的正確思想中沒有dba會給用戶創建和刪除鏈接服務器的權利! – HLGEM 2010-09-07 19:33:07

+0

在我的情況下,這是不是一個問題,因爲我總是dba。在一般情況下,你不僅僅是正確的。 – LaBracca 2010-09-08 12:16:42

回答

2

您是否考慮過使用OPENROWSET而不是每次創建/刪除鏈接的服務器?

+0

是的,你的意思是選擇語句,這將是一個更好的方法?由於不需要創建和銷燬鏈接的服務器,所以問題少了? – LaBracca 2010-09-07 15:37:11

+0

你是對的。 – 2010-09-07 15:48:21

+0

好的謝謝,直到我只需要執行select語句,這是一個更好的主意。 – LaBracca 2010-09-07 15:51:05

相關問題