我需要从远程数据库中检索一些数据,它是一种“更新管理器”,因此我的应用程序将连接到该远程服务器以检查是否有新的更新。
我使用网络服务器进行“握手和验证”工作,但后来我直接连接到远程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]=@SERVER)
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'
请您告诉我您对此方法的看法,并告诉我您看到哪些主要缺点/好处?