2010年1月22日 星期五

連接遠端SQL資料庫

以下做法可操作Sql Server遠端主機之資料庫
Step1.必須先將連線的 ANSI_NULLS 與 ANSI_WARNINGS 選項開啟,它才能執行分散式查詢
資料程式庫應用程式連線會將 SET ANSI_WARNINGS 設定為 OFF,所以須手動開啟

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON

SET ANSI_DEFAULTS ON

Step2.連接遠端SQL資料庫

'WINSERVER':Sql Server之執行個體,亦可輸入ip,當輸入ip時會自動抓取該台主機之預設值行個體
指定執行個體之方式:'WINSERVER\SQL2005'或'192.168.0.1'或'192.168.0.1\SQL2005'
EXEC sp_addlinkedserver 'WINSERVER', N'SQL Server'
exec sp_addlinkedsrvlogin 'WINSERVER', false, null,'sa','pw'

Step3.操作遠端資料庫之語法

select * from [WINSERVER].STDB_MCN.DBO.FDRCUSMI

Step4.登出遠端資料庫

EXEC sp_droplinkedsrvlogin 'WINSERVER', NULL
EXEC sp_droplinkedsrvlogin 'WINSERVER', 'sa'
exec sp_dropserver 'WINSERVER'

Step5.最後需將開啟之選項關閉

SET ANSI_NULLS OFF
SET ANSI_WARNINGS OFF

SET ANSI_DEFAULTS OFF

PS:登入與登出動作可將之寫成STORE PROCDURE

CREATE PROCEDURE [dbo].[PROC_LoginSQLServer]
AS
--Link不存在才建立連結
if not exists( select * from master.dbo.sysservers where srvname= '10.24.13.26')
begin
EXEC sp_addlinkedserver '10.24.13.26', N'SQL Server'
exec sp_addlinkedsrvlogin '10.24.13.26', false, null,'sa','admin'
end


CREATE PROCEDURE [dbo].[PROC_LogOutSQLServer]
AS
--Link存在才刪除連結
if exists( select * from master.dbo.sysservers where srvname= '10.24.13.26')
begin
EXEC sp_droplinkedsrvlogin '10.24.13.26', NULL
EXEC sp_droplinkedsrvlogin '10.24.13.26', 'sa'
exec sp_dropserver '10.24.13.26'
end

NOTE:
//判斷是否有註冊過(登陸遠端機器_sp_addlinkedserver)
select * from master.dbo.sysservers where srvname= '127.0.0.1'


沒有留言: