`
wanjianfei
  • 浏览: 319113 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何用SQL语句在两个数据库间复制存储过程

阅读更多

--1.在目标服务器上建立如下对象(被同步的服务器)

if exists (select * from dbo.sysobjects where id = object_id(N'[sys_syscomments_bak]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [sys_syscomments_bak]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_process_object]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_process_object]
GO

--创建辅助处理的表
create table sys_syscomments_bak(name sysname,xtype char(2),number smallint,colid smallint,status smallint,ctext varbinary(8000))
go

exec sp_configure 'allow updates',1 reconfigure with override
go

--创建处理的存储过程
create proc p_process_object
as
set xact_abort on
exec sp_configure 'allow updates',1 reconfigure with override
begin tran
--先删除系统表中的旧记录
delete a
from syscomments c,sysobjects o,sys_syscomments_bak ob
where c.id=o.id
and o.name=ob.name and o.xtype=ob.xtype

--再插入新记录到系统表中
insert syscomments([id],[number],[colid],[status],[ctext])
select o.[id],ob.[number],ob.[colid],ob.[status],ob.[ctext]
from sysobjects o,sys_syscomments_bak ob
where o.name=ob.name and o.xtype=ob.xtype
commit tran

--重新编译所有的对象
declare tb cursor local for
select case
when xtype='V' then 'exec sp_refreshview '
else 'sp_recompile' end
+'['+replace(object_name(id),N']',N']]')+']'''
from sys_syscomments_bak
declare @s nvarchar(4000)
open tb
fetch tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch tb into @s
end
close tb
deallocate tb
exec sp_configure 'allow updates',0 reconfigure with override
go

exec sp_configure 'allow updates',0 reconfigure with override
go
--2.在源服务器(提供被同步对象的服务器)

--先创建链接服务器,链接到目标服务器
if exists(select * from master..sysservers where srvname='srv_lnk')
exec sp_dropserver 'srv_lnk','droplogins'
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','目标服务器IP地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'登录的用户名','登录密码'
exec sp_serveroption 'srv_lnk','rpc out','true'
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_copyobject]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_copyobject]
GO

--再创建如下的处理过程来实现同步
create proc p_copyobject
as
--复制本机对象到目标服务器,注意修改库名为远程目标服务器的库名
delete from srv_lnk.库名.dbo.sys_syscomments_bak
insert srv_lnk.库名.dbo.sys_syscomments_bak
(name,xtype,number,colid,status,ctext)
select o.name,o.xtype,c.number,c.colid,c.status,c.ctext
from syscomments c,sysobjects o
where c.id=o.id
and o.status>=0
and o.xtype in('V','P','FN','IF','TF','TR')

--调用远程的存储过程完成最终的复制任务
exec srv_lnk.库名.dbo.sys_syscomments_bak
go

分享到:
评论

相关推荐

    存储过程中怎么动态执行sql语句

    通过以上两个示例可以看出,在Oracle存储过程中实现动态SQL语句的关键在于利用`EXECUTE IMMEDIATE`动态执行SQL语句以及通过创建包的方式来实现更为复杂的动态数据处理逻辑。这两种方法不仅提高了代码的灵活性,还...

    SQL Server数据库实验_存储过程与触发器设计.docx

    存储过程是预编译的SQL语句集合,它可以包含一系列的数据操作,如查询、更新、插入和删除等。通过创建存储过程,我们可以封装复杂的业务逻辑,提高代码复用性和执行效率。在实验5.1中,我们学习了如何使用`CREATE ...

    SQL语句创建存储过程

    在存储过程中实现数据插入,如上面的`usp_InsertUser`例子所示,我们定义了两个输入参数`@Username`和`@Email`,然后在`INSERT INTO`语句中使用这些参数向`Users`表添加新记录。 三、删(Delete) 创建一个删除...

    使用SQL语句管理数据库

    【使用SQL语句管理数据库】主要涉及的是对数据库进行创建、修改、删除以及分离和附加等操作,这些操作是数据库管理的基础。其中,T-SQL(Transact-SQL)是微软SQL Server中使用的数据库查询和编程语言,它扩展了标准...

    小型超市管理系统(sql数据库+各种功能存储过程和触发器)

    存储过程是预编译的SQL语句集合,能够执行复杂的数据库操作,如批量更新、事务处理等,提高效率并减少网络通信。触发器则是一种在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的程序,常用于维护数据...

    自动执行SQL语句&创建标准的Sql 存储过程

    在SQL数据库管理中,自动执行SQL语句和创建标准的SQL存储过程是两个重要的操作,它们对于数据库管理和数据处理有着深远的影响。以下是这两个主题的详细解释: 首先,自动执行SQL语句是指通过一定的机制,让预定义的...

    SQL语句实现跨Sql server数据库操作实例

    这里同样需要先配置好两个远程服务器的别名,然后使用上述SQL语句即可实现数据的跨实例插入操作。 #### 配置AdHoc Distributed Queries 为了能够在SQL Server中使用`OPENQUERY`或`OPENDATASOURCE`等功能来执行跨...

    SQL语句进行数据库权限设置

    本主题将深入探讨如何使用SQL语句进行数据库权限设置,以及SQL Server中的权限层次结构。 首先,我们需要理解SQL Server中的权限体系。权限分为两大类:对象权限和服务器权限。对象权限针对数据库内的具体对象,如...

    SQL 语句存储过程

    描述:动态创建数据库、动态查询、登录存储过程等,这些 SQL 语句都是动态应用的,不需要在使用 Use 指令,在一个数据库中,就可以操作所有数据库。 标签:SQL 语句 存储过程 部分内容: 1. 查询表的名字和表的...

    使用SQL语句建立TBS数据库.pdf

    使用 SQL 语句建立 TBS 数据库可以分为四个步骤:建立五个设备、扩展临时库、建立两个数据库和建立登录账户并设置属性。 1. 建立五个设备 首先,需要创建五个设备,包括数据设备、日志设备、临时库设备、系统数据...

    sql对比两个数据库之间的差异

    题目中的SQL语句主要利用了MySQL的信息模式表来比较两个数据库之间的表结构差异。具体来说,该查询通过比较两个不同数据库(假设为'ݿa'和'ݿb')中的列名称,找出在'ݿa'中存在的但在'ݿb'中缺失的列。 ```sql ...

    MS SQL数据库备份和恢复存储过程

    本文将详细介绍如何使用存储过程来实现这两个功能。 首先,我们来看备份数据库的存储过程`pr_backup_db`。这个存储过程用于创建一个数据库的备份,它接受三个参数:`@flag`用于记录过程运行状态,`@backup_db_name`...

    关系型数据库及SQL语句-SQLSERVER数据库设计与实现210页.doc

    在本文中,我们将介绍关系型数据库的基本概念、SQL语句的使用以及SQLSERVER数据库设计与实现的相关知识。 关系型数据库的基本概念 ------------------------- 关系型数据库是指使用关系模型来组织和存储数据的...

    数据库图书信息管理数据库SQL语句分享.pdf

    "数据库图书信息管理数据库SQL语句分享" 本资源摘要信息是关于数据库图书信息管理数据库SQL语句分享的详细知识点总结。 实验目的 1. 了解数据库以及数据表的设计 2. 熟悉 SQL Server 2005 中的数据类型 3. 熟悉...

    同一个sql语句 连接两个数据库服务器

    "同一个SQL语句连接两个数据库服务器"就是指利用这种技术,允许我们在一个SQL语句中跨服务器执行查询。下面将详细介绍如何在SQL Server查询分析器中设置和使用链接服务器。 首先,我们需要创建链接服务器。这是一个...

    Oracle Sql语句转换成Mysql Sql语句

    在使用这个工具时,开发者需要确保源代码中的SQL语句是标准的Oracle SQL格式,避免使用特定Oracle数据库的特性,以提高转换的成功率。同时,转换后还需要对生成的MySQL SQL进行测试,确保在目标数据库环境中能正常...

    连接mysql sqlserver的两个数据库

    以下是一个简单的示例,展示了如何在Java中建立这两个数据库的连接: ```java import java.sql.*; public class DualDatabaseConnection { public static void main(String[] args) { String mysqlUrl = "jdbc:...

    数据库函数、存储过程详解

    Sybase的存储过程则是一种存储在数据库服务器上的SQL语句集合,它可以接受参数、执行复杂操作,并可能返回结果集。存储过程有以下几个显著优点:一是提高了性能,因为它们只需编译一次,后续调用时无需再次解析;二...

    SQLServer数据库表中数据导出成SQL语句工具

    总之,“SQLServer数据库表中数据导出成SQL语句工具”是一种方便的解决方案,它简化了数据库表数据的导出过程,便于在不同环境间进行数据迁移和备份。了解并熟练掌握这类工具的使用,对于SQL Server管理员和开发人员...

    浅析SQL存储过程在.NET数据库中的应用.pdf

    SQL存储过程是一组预编译的SQL语句,存储在数据库中,可以通过指定名称并传递参数来执行。这种技术在数据库管理和数据处理中具有显著的优势。 在.NET框架中,SQL存储过程通常与ADO.NET的SqlDataAdapter对象和...

Global site tag (gtag.js) - Google Analytics