热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据库技术:简单实用SQL脚本PartSQLServer2005链接服务器

适用场景:对远程的DB进行操作。2000与2005对比:在SQLServer2000版本中也有链接远程DB的SQL,但是功能比较弱,扩展性差,支

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

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

创建步骤:SQL Server 2005版本打开SSMS务器对象->链接服务器->右击 新建链接服务器,在图2中是一种设置方式,也有其它的设置方式,比如:,图3是安全性选项中设置远程数据库的账号和密码。

简单实用SQL脚本Part SQLServer 2005 链接服务器 

(图1:新建链接) 

简单实用SQL脚本Part SQLServer 2005 链接服务器 

(图2:设置链接) 

简单实用SQL脚本Part SQLServer 2005 链接服务器 

(图3:设置帐号) 

 

注意事项: MSSQL2005Rpc的默认设置如图4所示, 需要把它设置为图5, 右键点击远程链接->属性->服务器选项->RpcRpc Out,这两个值需要设置为True

简单实用SQL脚本Part SQLServer 2005 链接服务器 

(图4: 默认设置) 

简单实用SQL脚本Part SQLServer 2005 链接服务器 

(图5: 正确设置) 

但在MSSQL2008下不能直接修改链接服务器 ‘ETV2_LINK’ RPC配置成TURE,可以通过语句修改如下:

USE [master]
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Nrpc@optvalue=Ntrue
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Nrpc out@optvalue=Ntrue
GO

 

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

简单实用SQL脚本Part SQLServer 2005 链接服务器 

(图6: 生成SQL脚本) 

 

SQL Server 2005生成远程链接对象的SQL脚本:

/****** 对象:  LinkedServer [ETV2_LINK]    脚本日期: 09/08/2010 17:36:11 ******/
EXEC master.dbo.sp_addlinkedserver @server = NETV2_LINK@srvproduct=NETV2_LINK@provider=NSQLNCLI@datasrc=NBWA035BWA035_2K5
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Ncollation compatible@optvalue=Nfalse
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Ndata access@optvalue=Ntrue
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Ndist@optvalue=Nfalse
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Npub@optvalue=Nfalse
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Nrpc@optvalue=Ntrue
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Nrpc out@optvalue=Ntrue
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Nsub@optvalue=Nfalse
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Nconnect timeout@optvalue=N0
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Ncollation name@optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Nlazy schema validation@optvalue=Nfalse
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Nquery timeout@optvalue=N0
GO
EXEC master.dbo.sp_serveroption @server=NETV2_LINK@optname=Nuse remote collation@optvalue=Ntrue

 

使用假设已经创建了名为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 = NVisiteLog_20100629 AND type in (NU))
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 (NU))
    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脚本,更多相关脚步可以参考: 

需要了解更多数据库技术:简单实用SQL脚本Part SQLServer 2005 链接服务器,都可以关注数据库技术分享栏目—编程笔记

方法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
作者:听风吹雨


推荐阅读
  • 本文探讨了在使用Apache Flink向Kafka发送数据过程中遇到的事务频繁失败问题,并提供了详细的解决方案,包括必要的配置调整和最佳实践。 ... [详细]
  • 本文详细介绍了如何利用go-zero框架从需求分析到最终部署至Kubernetes的全过程,特别聚焦于微服务架构中的网关设计与实现。项目采用了go-zero及其生态组件,涵盖了从API设计到RPC调用,再到生产环境下的监控与维护等多方面内容。 ... [详细]
  • 本文详细介绍了如何在阿里云 ECS 实例上安装和配置 MySQL 数据库,包括安装 MySQL 的 Yum 仓库、解决常见安装问题、启动服务以及设置初始用户权限等步骤。 ... [详细]
  • PHP网站部署指南:从零开始搭建PHP网站
    本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置单节点的Redis服务,包括下载、解压、编译安装以及启动服务的具体步骤。 ... [详细]
  • Apollo入门指南
    Apollo是一个分布式配置中心,由服务端和客户端组成,支持配置的集中管理和动态更新。 ... [详细]
  • 这个报错出现在userDao里面,sessionfactory没有注入。解决办法:spring整合Hibernate使用test测试时要把spring.xml和spring-hib ... [详细]
  • 深入解析Spring Boot项目的启动机制
    在Java后端开发中,Spring Boot框架以其简洁性和强大的功能受到了广泛欢迎。本文将探讨Spring Boot项目启动的核心——SpringApplication类及其run()方法的工作原理。 ... [详细]
  • 本文讨论了在处理分页数据时常见的低级错误,并提供了优化后的代码示例,以减少重复代码并提高可读性和维护性。 ... [详细]
  • MySQL磁盘空间满的解决方案及预防措施
    本文介绍了一个案例,其中MySQL服务器的磁盘使用率达到100%,仅剩余几十兆空间。通过一系列操作,包括备份数据库、删除实例、删除数据库表以及重启MySQL服务,但未能有效释放磁盘空间。文章进一步探讨了可能的原因和最终解决问题的方法。 ... [详细]
  • 使用EF Core在.Net Core控制台应用中操作SQLite数据库
    本文介绍如何利用Visual Studio 2019和Windows 10环境,通过Entity Framework Core(EF Core)实现对SQLite数据库的读写操作。项目源代码可从百度网盘下载。 ... [详细]
  • 本文探讨了Lua中元表和元方法的使用,通过具体的代码示例展示了如何利用这些特性来实现类似C语言中的运算符重载功能。 ... [详细]
  • 本文探讨了在Qt框架下实现TCP多线程服务器端的方法,解决了一个常见的问题:服务器端仅能与最后一个连接的客户端通信。通过继承QThread类并利用socketDescriptor标识符,实现了多个客户端与服务器端的同时通信。 ... [详细]
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
author-avatar
mobiledu2502883183
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有