2010-09-07 36 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

相关问题