主頁 > 知識庫 > 簡單實(shí)用SQL腳本Part SQLServer 2005 鏈接服務(wù)器

簡單實(shí)用SQL腳本Part SQLServer 2005 鏈接服務(wù)器

熱門標(biāo)簽:無錫梁溪公司怎樣申請400電話 電話機(jī)器人錄音師薪資 中國地圖標(biāo)注省份用什么符號 奧維地圖標(biāo)注字體大小修改 智能電銷機(jī)器人教育 高德地圖標(biāo)注電話怎么沒了 孝感銷售電銷機(jī)器人廠家 江西穩(wěn)定外呼系統(tǒng)供應(yīng)商 北京智能外呼系統(tǒng)供應(yīng)商家

適用場景:對遠(yuǎn)程的DB進(jìn)行操作。

20002005對比:SQL Server 2000版本中也有鏈接遠(yuǎn)程DBSQL,但是功能比較弱,擴(kuò)展性差,支持的查詢比較簡單。而SQL Server 2005版本的SSMS中已經(jīng)有了 服務(wù)器對象->鏈接服務(wù)器 的功能點(diǎn),用戶首先創(chuàng)建一個(gè)遠(yuǎn)程DB的鏈接對象,之后就可以像本地表一樣執(zhí)行表的DML了。

創(chuàng)建步驟:SQL Server 2005版本打開SSMS,服務(wù)器對象->鏈接服務(wù)器->右擊 新建鏈接服務(wù)器,在圖2中是一種設(shè)置方式,也有其它的設(shè)置方式,比如:[圖解]sqlserver中創(chuàng)建鏈接服務(wù)器,圖3是安全性選項(xiàng)中設(shè)置遠(yuǎn)程數(shù)據(jù)庫的賬號和密碼。

 

(圖1:新建鏈接) 

 

(圖2:設(shè)置鏈接) 

 

(圖3:設(shè)置帳號) 

 

注意事項(xiàng): MSSQL2005Rpc的默認(rèn)設(shè)置如圖4所示, 需要把它設(shè)置為圖5, 右鍵點(diǎn)擊遠(yuǎn)程鏈接->屬性->服務(wù)器選項(xiàng)->RpcRpc Out,這兩個(gè)值需要設(shè)置為True。

 

(圖4: 默認(rèn)設(shè)置) 

 

(圖5: 正確設(shè)置) 

但在MSSQL2008下不能直接修改鏈接服務(wù)器 'ETV2_LINK' RPC配置成TURE,可以通過語句修改如下:

USE [master]
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'rpc'@optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'rpc out'@optvalue=N'true'
GO

 

生成腳本:如果已經(jīng)通過操作界面生成了 'ETV2_LINK' 的鏈接服務(wù)器,那么我們?nèi)绻枰阉浦驳狡渌鼣?shù)據(jù)庫(部署、更新)的時(shí)候,就可以通過下面的方法來生產(chǎn)SQL腳本,你也可以通過修改SQL腳本來快速新建或修改鏈接服務(wù)器,比如修改@server鏈接服務(wù)器名稱,修改@datasrc遠(yuǎn)程鏈接的數(shù)據(jù)庫對象。

 

(圖6: 生成SQL腳本) 

 

SQL Server 2005生成遠(yuǎn)程鏈接對象的SQL腳本:
/****** 對象:  LinkedServer [ETV2_LINK]    腳本日期: 09/08/2010 17:36:11 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'ETV2_LINK'@srvproduct=N'ETV2_LINK'@provider=N'SQLNCLI'@datasrc=N'BWA035\BWA035_2K5'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'collation compatible'@optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'data access'@optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'dist'@optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'pub'@optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'rpc'@optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'rpc out'@optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'sub'@optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'connect timeout'@optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'collation name'@optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'lazy schema validation'@optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'query timeout'@optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'ETV2_LINK'@optname=N'use remote collation'@optvalue=N'true'

 

使用假設(shè)已經(jīng)創(chuàng)建了名為ETV2_LINK的遠(yuǎn)程鏈接對象,那么你就可以像下面的方式來使用這個(gè)對象操作遠(yuǎn)程DB。

使用場景1查詢ETV2_LINK這個(gè)遠(yuǎn)程鏈接對象的[etV2_Online]數(shù)據(jù)庫中VisiteLog_20100629表的數(shù)據(jù)。模板形如:Select * From [鏈接服務(wù)器名].[遠(yuǎn)程數(shù)據(jù)庫名].[所有者].[表名]
--查詢遠(yuǎn)程DB表TableName
select * from ETV2_LINK.[etV2_Online].dbo.VisiteLog_20100629

 

使用場景2判斷ETV2_LINK這個(gè)遠(yuǎn)程鏈接對象的[etV2_Online]數(shù)據(jù)庫中是否存在名為VisiteLog_20100629的表。

--注意:是sys.objects不是sysobjects
--
判斷遠(yuǎn)程用戶是否存在某張表
IF EXISTS (SELECT * FROM ETV2_LINK.[etV2_Online].sys.objects WHERE name = N'VisiteLog_20100629' AND type in (N'U'))
BEGIN
    
--邏輯處理
    print '存在表'
END

 

使用場景3判斷遠(yuǎn)程DB[etV2_Online]數(shù)據(jù)庫中是否存在名為VisiteLog_20100629的表。只不過這個(gè)表名是參數(shù)化的,可以通過傳入的參數(shù)進(jìn)行判斷。這里只是簡單的設(shè)置變量的值并使用OUT來返回變量。 

--判斷遠(yuǎn)程用戶是否存在某張表(參數(shù)化表名),返回變量
DECLARE @IsExistTable VARCHAR(10)
DECLARE @Tablename VARCHAR(50)
DECLARE @sqlString NVARCHAR(4000)
SET @IsExistTable = 'False'
SET @Tablename = 'VisiteLog_'+convert(varchar(9),getdate()-1,112--例如VisiteLog_20100629
SET @sqlString = 
'IF EXISTS (SELECT * FROM ETV2_LINK.[etV2_Online].sys.objects WHERE name = N'''+@Tablename+''' AND type in (N''U''))
    set @IsExistTableOUT =
''True'''
EXEC sp_executesql @sqlString,N'@IsExistTableOUT varchar(10) OUTPUT',@IsExistTableOUT=@IsExistTable OUTPUT

IF (@IsExistTable = 'True')--存在
BEGIN
    
--邏輯處理
    print '存在表'
END

 

補(bǔ)充: SQL Server 2000版本連接遠(yuǎn)程服務(wù)器的SQL腳本,更多相關(guān)腳步可以參考:在T-SQL語句中訪問遠(yuǎn)程數(shù)據(jù)庫(openrowset/opendatasource/openquery) 

--方法1:
select *  from openrowset('SQLOLEDB','server=192.168.0.67;uid=sa;pwd=password','SELECT * FROM BCM2.dbo.tbAppl')

--方法2:
select *  from openrowset('SQLOLEDB','192.168.0.67';'sa';'password','SELECT * FROM BCM2.dbo.tbAppl'
作者:聽風(fēng)吹雨
您可能感興趣的文章:
  • 通過創(chuàng)建SQLServer 2005到 Oracle10g 的鏈接服務(wù)器實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫數(shù)據(jù)轉(zhuǎn)換方案
  • sqlserver 2000中每個(gè)服務(wù)器角色的解釋
  • sqlserver中創(chuàng)建鏈接服務(wù)器圖解教程
  • SQLServer 2000 數(shù)據(jù)庫同步詳細(xì)步驟[兩臺服務(wù)器]
  • 遠(yuǎn)程連接SQLSERVER 2000服務(wù)器方法
  • sqlserver 2000 遠(yuǎn)程連接 服務(wù)器的解決方案
  • Sql Server2012 使用IP地址登錄服務(wù)器的配置圖文教程

標(biāo)簽:海北 齊齊哈爾 泰州 阜陽 臨滄 那曲 通化 荊州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《簡單實(shí)用SQL腳本Part SQLServer 2005 鏈接服務(wù)器》,本文關(guān)鍵詞  簡單,實(shí)用,SQL,腳本,Part,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《簡單實(shí)用SQL腳本Part SQLServer 2005 鏈接服務(wù)器》相關(guān)的同類信息!
  • 本頁收集關(guān)于簡單實(shí)用SQL腳本Part SQLServer 2005 鏈接服務(wù)器的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章