SQL创建链接服务器(脚本)

适用场景:对远程的DB进行操作。

2000与2005对比:在SQL Server 2000版本中也有链接远程DB的SQL,但是功能比较弱,扩展性差,支持的查询比较简单。而SQL Server 2005版本的SSMS中已经有了 服务器对象->链接服务器 的功能点,用户首先创建一个远程DB的链接对象,之后就可以像本地表一样执行表的DML了。

创建步骤:在SQL Server 2005版本打开SSMS,服务器对象->链接服务器->右击 新建链接服务器,在图2中是一种设置方式,也有其它的设置方式

注意事项: 在MSSQL2005中Rpc的默认设置为True, 右键点击远程链接->属性->服务器选项->Rpc和Rpc Out,这两个值需要设置为True。

但在MSSQL2008下不能直接修改链接服务器 '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

 

生成脚本:如果已经通过操作界面生成了 'ETV2_LINK' 的链接服务器,那么我们如果需要把它移植到其它数据库(部署、更新)的时候,就可以通过下面的方法来生产SQL脚本,你也可以通过修改SQL脚本来快速新建或修改链接服务器,比如修改@server链接服务器名称,修改@datasrc远程链接的数据库对象。 

SQL Server 2005生成远程链接对象的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'

 

使用假设已经创建了名为ETV2_LINK的远程链接对象,那么你就可以像下面的方式来使用这个对象操作远程DB。

使用场景1: 查询ETV2_LINK这个远程链接对象的[etV2_Online]数据库中VisiteLog_20100629表的数据。模板形如:Select * From [链接服务器名].[远程数据库名].[所有者].[表名]

--查询远程DB表TableName
select * from ETV2_LINK.[etV2_Online].dbo.VisiteLog_20100629

 

使用场景2: 判断ETV2_LINK这个远程链接对象的[etV2_Online]数据库中是否存在名为VisiteLog_20100629的表。

--注意:是sys.objects不是sysobjects
--
判断远程用户是否存在某张表
IF EXISTS (SELECT * FROM ETV2_LINK.[etV2_Online].sys.objects WHERE name = N'VisiteLog_20100629' AND type in (N'U'))
BEGIN
    --逻辑处理
    print '存在表'
END

 

使用场景3: 判断远程DB的[etV2_Online]数据库中是否存在名为VisiteLog_20100629的表。只不过这个表名是参数化的,可以通过传入的参数进行判断。这里只是简单的设置变量的值并使用OUT来返回变量。 

--判断远程用户是否存在某张表(参数化表名),返回变量
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

 

补充: SQL Server 2000版本连接远程服务器的SQL脚本,更多相关脚步可以参考:在T-SQL语句中访问远程数据库(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'


------------------------------------------------------------------------------------------------------------------



SP_addlinkedserver 小结 (oracle,sql server,access,excel)

    

/SQL SERVER

Exec sp_droplinkedsrvlogin DBVIP,Null

Exec sp_dropserver DBVIP

EXEC sp_addlinkedserver

      @server='DBVIP',--被访问的服务器别名

      @srvproduct='',

      @provider='SQLOLEDB',

      @datasrc='Server2'   --要访问的服务器

 

EXEC sp_addlinkedsrvlogin 

     'DBVIP', --被访问的服务器别名

     'false', 

     NULL, 

     'sa', --帐号

     'thankyoubobby' --密码

 

Select   *   from DBVIP.pubs.dbo.orders   

 

/ORACLE

需要SQL SERVER服务器中安装ORACLE客户端;

Exec sp_droplinkedsrvlogin demo,Null

Exec sp_dropserver demo

go

EXEC sp_addlinkedserver 

        @server ='demo', --要创建的链接服务器别名

        @srvproduct='Oracle', --产品名称     

 @provider='MSDAORA', --OLE DB 字符

 @datasrc='ServiceName'   --数据源oracle"ora92"network"admin"tnsnames.ora 查看

 

EXEC sp_addlinkedsrvlogin 

     'demo', --已建立的链接服务器名

     'false', -- 固定*/

     NULL, --为每个登陆SQL SERVER的用户使用此链接服务器,否则写用户名*/

     'userid', --帐号

     'password' –密码

go

 

SELECT * FROM demo.. USERID.TABLE

--注意用大写,因为在Oracle的数据字典中为大写

数据库的格式必须是链接服务器名..ORACLE用户名.表名.

 

SELECT * FROM OPENQUERY(demo ,'select * from tbdemo' )

UPDATE OPENQUERY (demo, 'SELECT id FROM tbdemo WHERE id = 101') 

SET name = 'hello';

INSERT OPENQUERY (demo, 'SELECT id FROM tbdemo')

VALUES ('hello');

DELETE OPENQUERY (demo, 'SELECT id FROM tbdemo WHERE name = ''hello''');

如此则在SQL SERVER中就可以访问ORACLE的数据了。

建立的链接服务器可以在企业管理器中看见.

 

/ACCESS

--建立连接服务器

EXEC sp_addlinkedserver 

'ai',             --要创建的链接服务器名称 

‘access',     --产品名称    

'Microsoft.Jet.OLEDB.4.0', --OLE DB 字符

'd:"testdb"db.mdb' --数据源-- 盘符:"路径"文件名-- ""网络名"共享名"文件名 (网络版本) 

GO 

 

--创建链接服务器上远程登录之间的映射

--链接服务器默认设置为用登陆的上下文进行

--现在我们修改为连接链接服务器不需使用任何登录或密码

exec sp_addlinkedsrvlogin 'ai','false' 

go 

 

select * from ai...mytable 

 

/EXCEL

--建立连接服务器

EXEC sp_addlinkedserver 

'ai_ex',            --要创建的链接服务器名称 

'ex',     --产品名称         

'Microsoft.Jet.OLEDB.4.0', --OLE DB 字符

'd:"testdb"mybook.xls' , --数据源-- 盘符:"路径"文件名-- ""网络名"共享名"文件名 (网络版本) 

null, 

'Excel 5.0' --OLE DB 提供程序特定的连接字符串

GO 

 

----创建链接服务器上远程登录之间的映射

--链接服务器默认设置为用登陆的上下文进行

--现在我们修改为连接链接服务器不需使用任何登录或密码

exec sp_addlinkedsrvlogin 'ai_ex','false' 

go 

 

--查询数据

select * from ai_ex...sheet3$ 

 

/MS SQL

--建立连接服务器

EXEC sp_addlinkedserver 

'ai_mssql',        --要创建的链接服务器名称       

'ms',     --产品名称 

'SQLOLEDB', --OLE DB 字符

'218.204.111.111,3342' --数据源

GO 

 

--创建链接服务器上远程登录之间的映射

EXEC sp_addlinkedsrvlogin 

'ai_mssql', 

'false', 

NULL, 

'zhangzhe', --远程服务器的登陆用户名

'fish2231' --远程服务器的登陆密码

go 

 

--查询数据

select * from ai_mssql.pubs.dbo.jobs 

 

--还有一个更简单的办法

--这种方式在链接服务器建立后,它是默认开放RPC的

--建立连接服务器

EXEC sp_addlinkedserver 

'218.204.111.111,3342', --要创建的链接服务器名称

'SQL Server' --这里就用数据源作名称

GO 

 

--创建链接服务器上远程登录之间的映射

EXEC sp_addlinkedsrvlogin 

'218.204.111.111,3342', 

'false', 

NULL, 

'zhangzhe', --远程服务器的登陆用户名

'fish2231' --远程服务器的登陆密码

go 

 

--查询数据

select * from [218.204.253.131,3342].pubs.dbo.jobs 

go 

----------------------------------------------------------------------------------


if exists (select * from master.dbo.sysservers where srvname = 'srv_lnk')
    exec sp_dropserver 'srv_lnk','droplogins'
go

exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','192.168.2.238'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa',''

-- 格式
exec sp_addlinkedserver '链接名','','SQLOLEDB','服务器名'
exec sp_addlinkedsrvlogin '链接名','false',null,'用户名','密码' --用户名,密码空时为 Null

-- 使用方法 ,例:
select * from 链接服务器.数据库名.拥有者.表名

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【SA默认密码:593106】 使用环境: Windows OS(vista/win7/win8/xp/2000/2003) 不支持Windows 9x 软件功能: 1、MSSQL2000数据库服务开启、关闭控制; 2、基本数据库操作(改密码、数据库新建、删除、分离、附加、备份、恢复); 3、日志和连接信息,简易防火墙,自启动设置,计划任务(自动备份与执行)等。 注意事项: 1、本软件必须定义实例名和端口,本软件中的数据库无目录限制; 2、新建、附加和恢复数据库,这几项操作会将数据库保存或转移到本软件所在目录的DATA目录下,同时也会将数据库文件的物理文件名和逻辑名进行调整; 3、删除、分离数据库时,会自动清除目标数据库的用户连接; 4、防火墙仅仅是实现根据连入PC的网卡地址进行连接断开的操作,没啥用^_^; 5、计划任务只有在勾选时才会写入配置文件,在开启服务后才会读取并开启任务,如果计划任务中定义的数据库被删除或分离,任务会自动取消; 6、如果需要使用默认实例,请千万不要发布到有安装MSSQL且使用默认实例的机子上去,会造成目标机子上的MSSQL无法正常使用; 7、管理员帐号SA的默认密码是593106,第一次解锁时请输入这一密码,然后自行在数据库页修改密码。 使用方法: 运行程序》设置实例名》设置端口》开启。 如果需要让程序自动开启服务,请勾选自动开启,开机启动表示随OS启动。 与您的软件一起分发的方法: 1、运行本程序; 2、勾选 自动开启、开机启动和服务守护; 3、将本软件及附属文件一起打包进您的安装程序中。 您也可以将您需要分发的软件所用数据库直接附加或恢复到本软件中,从而省去恢复数据库的操作。 关于vista/win7/win8中UAC未禁用时无法开机自启动的情况,请按以下步骤解决: 1、运行本程序,设置好 实例名称和服务端口,勾选自动开启和服务守护; 2、打开 开始》控制面板》系统和安全》计划任务; 3、创建任务》常规》输入名称》勾选下面的 使用最高权限运行; 触发器》开始任务 选择 登录时》设置 选择 所有用户》高级设置 勾选 启用; 操作》操作 选择 启动程序》程序或脚本 选择 迷你SQL2000目录下的sql2k.exe; 4、以上设置完成后,点击 确定 进行保存,然后就可以重启win7进行测试了。 分发时请不要包含本说明文件,增加您自定义的说明文本即可。 更新日志: *修正 +增加 -去除 ^调整 1.2.6 *还原数据库时,修正输入库名时点取消后没有中止还原等错误; +查询分析器添加语法高亮支持; *修正关闭服务时,有机率卡顿的现象,进行了优化处理; +在操作系统关闭时,自动停止服务,防止数据丢失。 1.2.5 +数据库页增加查看我的表功能菜单项,可管理视图、存储过程及自定义函数和查看表结构等; ^部分菜单及按钮增加图标,增加美观度; +内存管理页增加AWE开关,以解决部分电脑内存不足造成运行缓慢的问题,AWE功能也占内存。 1.2.4 ^选择开机启动时,会自动删除与软件关联的注册表项,防止变更实例名造成注册表残留,对于已登记开机启动,又直接删除了软件的,请手工删除注册表Run项中的残留; *修正部分win7系统下无法正常解锁的问题(系统无法访问127.0.0.1造成); *修正部分文字描述内容错误(漏字或多打字等)。 1.2.3 +数据库页面,集成外部工具“查询分析器”与“事件探查器”,系SQL自带程序,方便使用; -删除内置“查询分析”功能页; ^数据库页面,密码修改,允许任意字符,不再限制只能为0~9a~z了,但不允许为空; ^数据库内核升级至8.00.2305,开启AWE,支持大内存(超2G)及修复漏洞; +增加SQL Tips页,记录一些常用的SQL语句,方便查阅; ^标题栏解锁界面和密码修改页面进行调整,增加多语言支持。 1.2.2 *附加数据库时,修正输入库名时点取消后没有中止附加等错误; +增加面板锁,点击左上角的金锁,输入SA用户密码,输入正确则打开面板,否则隐藏面板,不限制开、关服务; +数据库页面,右键菜单增加打开文件目录,方便用户操作; +增加内存管理页,控制SQL Server内存占用,与企业管理器相同。 1.2.1 ^未开启服务时,关闭窗口会退出程序,开启服务时,关窗窗口则是隐藏; *附加数据库时,修正目标目录与源目录相同时无法附加的问题。 1.2.0 +增加托盘区菜单项“重启”,方便重启SQL服务; ^附加数据库文件时,将移动改为复制,原文件不会被删除; +计划任务在备份数据库后,自动清除旧备份,只保留最后5个备份(按文件,不按时间); *修正计划任务无法正确执行的问题,由皮肤引起的。 1.1.9 +增加win8的支持,增加皮肤以美化界面; +增加查询分析器,方便使用SQL操作数据库; +增加简体、繁体语言切换,方便港台及深圳用户使用。 1.1.8 ^计划任务中执行SQL语句变更为执行SQL脚本文件,支持GO分隔,方便执行复杂任务。 1.1.7 +配置文件中增加AppTitle字符串项,如果有输入内容,则在启动时会以该项的值为窗口标题;繁体用户请将配置文件保存为Unicode格式; *修正没有清除默认实例注册表项的问题。 1.1.6 +控制程序增加对指定消息的处理,方便用户控制迷你数据库,详见包内的“控制demo”例程。 1.1.5 +同目录下只允许启动一个EXE,互斥对象,不影响启用多实例; ^原“恢复”变更为“还原”,还原时显示默认的数据库名称; +显示数据库状态,在数据库页的右键菜单项上增加修复置疑和联机数据库功能项; +勾选默认实例时,先进行检测,如安装了MSSQL服务,则禁止勾选默认实例; +计划任务,备份计划处增加选择目录的图片按钮,方便操作。 1.1.4 ^调整关闭服务过程,等待所有SQL任务执行完毕后才会关闭服务,确保用户操的作完整性; +增加服务进程窗口的显示选项,可即可查看服务日志; ^优化启动时的部分设置,提高效率,减少资源占用。 1.1.3 *修正内存释放问题,旧版会造成内存递增。 1.1.2 ^计划任务、执行脚本、恢复和备份数据库时,不限制指令执行等待时间,以免超时; *修正部分文字内容的显示错误; +增加按计算机名和IP地址访问实例的参考连接字提示; *修正启动时的一个参数错误,解决日志勾选切换造成启动失败的问题。 1.1.1 ^优化提示信息,更加人性化,执行脚本时会显示正在执行第几个脚本文件; ^优化启动服务的代码,默认实例或指定实例运行时更加稳定; ^优化数据库页右键菜单显示,允许对系统库进行操作。 1.1.0 +增加同个目录只允许运行一个实例的自动处理; *修正开启服务过程中碰到异常时,没有修改实例状态的错误; +支持强制使用默认实例,也就是使用1433端口和空实例名。 ps:升级了tools目录下的makesql和runsql,均支持unicode,与MSSQL配合使用效果非常 不错的(makesql在2ccc.com上有源码可下载,增加表内容较多时自动添加GO分隔, 以免执行时报内存不足的错误) 1.0.9 *修正被部分杀软报毒的问题; *修正停止服务时没有清除标识,造成提示无法运行相同实例的错误。 1.0.8 ^调整窗口关闭事件,用户必须用托盘区的右键菜单退出程序; +加入vista/win7的UAC签名,运行程序时会自动请求提权; +开启服务前自动验证下有没有相同的实例在运行。 1.0.7 +数据库页增加收缩数据库和清除日志文件内容的右键功能项; +增加版本号显示,优化部分代码; +增加启动前自检,缺少文件时会有提示。 1.0.6 *修正附加和恢复数据库时,逻辑名处理不正确的问题。 1.0.5 ^备份数据库时使用完整备份,不再自动使用增量备份; *修正部分错误,优化代码以提高处理速度。 1.0.4 +增加服务守护,在服务被异常终止时,自动开启服务。 1.0.3 *连接与防火墙,防火墙列表增加与减少时的空数据项错误; *修正托盘区无法激活主窗口的问题; +增加多实例启动支持(复制多份,设置不同的实例名和端口即可启动多个实例); ^运行日志调整为50行滚动提示,供参考。 1.0.2 *附加数据库,日志文件路径未修改的错误; ^数据库列表,数据和日志文件的路径显示为绝对路径; +计划任务,增加自动备份和执行SQL语句的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值