[英]Connect to remote server in T-SQL (SQL server 2008)
有沒有人有一個存儲過程的例子,它連接到遠程服務器?
我一直在網上搜索,到目前為止發現它可以使用sp_addlinkedserver
和sp_addlinkedsrvlogin
完成,但我沒有找到一個很好的例子,我不太了解文檔。
這兩個第一個回復都沒有幫助我,我能得到的最接近的是:
EXEC sp_addlinkedserver
@server = 'SiminnSrv',
@provider = 'SQLNCLI',
@catalog = 'devel',
@srvproduct = '',
@provstr = 'DRIVER={SQL Server};SERVER=my.serveradr.com;UID=my_user_name;PWD=my_pass_word;'
這實際上讓我連接,但當我查詢表時,我收到此消息:
用戶'(null)'登錄失敗。 原因:與受信任的SQL Server>連接無關。
基本上,您將鏈接服務器創建到其他服務器,然后提供用於對該鏈接服務器的SQL調用的登錄憑據。 例如,這將使用用戶名和密碼“DomainUserName”,“DomainPassword”的DomainAccount連接到“MyOtherServer”
EXEC sp_addlinkedserver 'MyOtherServer', N'SQL Server'
EXEC sp_addlinkedsrvlogin
'MyOtherServer',
'false',
'OtherServerDomain\DomainUser',
'DomainUserName',
'DomainPassword'
我設法使用“SQL Server Native Client 10”( SQLNCLI10
)通過鏈接服務器連接到MSSQL Server 2008,但我不得不使用sp_addlinkedsrvlogin
而不是@provstr
來提供連接詳細信息。 這基於本文中的示例:
EXEC master.dbo.sp_addlinkedserver
@server = 'MyServerConnection',
@srvproduct = '',
@datasrc = 'SERVERNAME\INSTANCENAME',
@provider = 'SQLNCLI10',
@provstr = ''
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'MyServerConnection',
@useself = 'false',
--@locallogin = 'someLocalUser' -- Use to restrict the connection to specific login
@rmtuser = 'remoteUser',
@rmtpassword = 'secret'
查詢此鏈接服務器:
SELECT *
FROM [MyServerConnection].[SomeDatabase].[dbo].[TableName]
我可能遲到了,但我發現以下鏈接對我有用:
為了執行初始鏈接,我使用了
EXEC sp_addlinkedserver @server='serverLinkPseudonym',@srvproduct='',@provider='SQLOLEDB', @datasrc='192.168.1.1';
然后,當我使用Windows身份驗證登錄時,我添加了Windows用戶(這使我的“與可信SQL Server無關”錯誤)
EXEC sp_addlinkedsrvlogin 'serverLinkPseudonym', 'false', 'MACHINENAME\windowsLogin', 'lnkSrvLogin', 'lnkSrvPswd';
我還發現,如果我要運行調用LinkedServer的SQL Server代理作業,我必須添加以下內容:
EXEC sp_addlinkedsrvlogin 'serverLinkPseudonym', 'false', 'NT AUTHORITY\SYSTEM', 'lnkSrvLogin', 'lnkSrvPswd';
為清楚起見:“192.168.1.1”是要鏈接的服務器的IP。 “lnkSrvLogin”是要鏈接到的服務器上的登錄名,可以訪問您需要訪問的數據庫。 “lnkSrvPswd”是該帳戶的密碼。
如果使用現有服務器中的帳戶連接到鏈接服務器,則只需在sp_addlinkedsrvlogin命令中使用該帳戶名。 例如:
EXEC sp_addlinkedsrvlogin 'serverLinkPseudonym', 'false', 'thisServerLogin', 'lnkSrvLogin', 'lnkSrvPswd';
然后測試一下:
SELECT * FROM [serverLinkPseudonym].[DBName].[dbo].[TableName]
如果您希望能夠查詢其他服務器,則需要創建鏈接服務器。
這個頁面對sp的工作方式進行了非常詳盡的探討。 http://doc.ddart.net/mssql/sql70/sp_adda_17.htm
如果你想鏈接到antoher sql server,只需執行以下命令:
sp_addlinkedserver @server='ServerName', @srvproduct='SQL Server'
@server是要添加的服務器的名稱。 @srcproduct是它的服務器類型。 可能還有其他一些事情要做,以便將2008年與2005年聯系起來,但2008年應該像這樣工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.