`

复制表结构的通用存储过程

阅读更多

复制表结构的通用存储过程 <o:p></o:p>

-- Transfer 对象的重要属性 <o:p></o:p>

-- 1.  属性 <o:p></o:p>

属性名                              类型                  描述
--------------------------------- ------------------- --------------------
CopyAllDefaults                Boolean    
所有默认值
CopyAllObjects                 Boolean    
所有对象
CopyAllRules                   Boolean    
所有规则
CopyAllStoredProcedures        Boolean    
所有存储过程
CopyAllTables                  Boolean    
所有表
CopyAllTriggers                Boolean    
所有触发器
CopyAllUserDefinedDatatypes    Boolean    
所有用户自定义类型
CopyAllViews                   Boolean    
所有视图
CopyData                       Boolean    
所有数据
DestDatabase                   String     
目标对象数据库
DestLogin                      String     
目标数据库登陆用户名
DestPassword                   String     
目标数据库登陆密码
DestServer                     String     
目标服务器
DestUseTrustedConnection       Boolean    
用户信任连接
DropDestObjectsFirst           Boolean    
是否先删除目标对象
IncludeDependencies            Boolean    
是否包含依靠对象
ScriptType                     Boolean    
脚本类型 <o:p></o:p>

-- 2.  重要方法 : <o:p></o:p>

方法名称                      功能描述
--------------------------- --------------------------
AddObject                   
增加对象
AddObjectByName             
通过对象名称增加对象 <o:p></o:p>

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

/*-- 
 SQLServer  中使用 SQLDMO.Transfer  实现数据迁移
    
存储过程实现源数据库到目标数据库的对象和数据的复制
    
要求源数据库和目标数据库在同一服务器
    
如果是要实现不同服务器之间的复制,则需要增加验证信息
--
邹建  2005.07( 引用请保留此信息 )--*/

/*--
调用示例

    CREATE DATABASE test
    EXEC P_CopyDB @Source_DB='northwind',@Des_DB='test'
    DROP DATABASE test
--*/
CREATE PROCEDURE P_CopyDB     
@Des_DB      sysname,           --
目标数据库
@Obj_Type    nvarchar(4000)=N'',--
复制的对象类型,可以是下列字符串列表:
                                -- O 
所有对象, 默认值, 规则, 存储过程
                                -- T 
表, TR  触发器, DT  用户定义数据类型
                                -- V 
视图, DATA  数据, DEL  删除目标对象
@Source_DB   sysname=N'',       --
源数据库
@ServerName  sysname=N'',       --
服务器名
@UserName    sysname=N'',       --
用户名,不指定则表示使用  Windows  身份登录
@pwd         sysname=N''        --
密码  
AS
SET NOCOUNT ON
DECLARE @srvid int,@Dbid int,@S_dbid int,@D_dbid int,@TransferID int,
    @err int,@src varchar(255), @desc varchar(255)

IF ISNULL(@ServerName,N'')=N'' SET @ServerName=@@SERVERNAME
IF ISNULL(@Source_DB,N'')=N'' SET @Source_DB=DB_NAME()<o:p></o:p>

-- 创建 sqldmo 对象 ·
EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT
IF @err<>0 GOTO lb_Err

--
连接服务器
IF ISNULL(@UserName,N'')=N'' --
使用  Windows  身份登录
BEGIN
    EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1
    IF @err<>0 GOTO lb_Err

    EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername
END
ELSE
    EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername,@UserName,@pwd

IF @err<>0 GOTO lb_Err

--
获取数据库集
EXEC @err=sp_oagetproperty @srvid,'databases',@Dbid OUT
IF @err<>0 GOTO lb_Err

--
选择源数据库     
EXEC @err=sp_oamethod @Dbid,'item',@S_dbid OUT,@Source_DB
IF @err<>0 GOTO lb_Err

--
选择目标数据库     
EXEC @err=sp_oamethod @Dbid,'item',@D_dbid OUT,@Des_DB
IF @err<>0 GOTO lb_Err

--
设置复制的对象
EXEC @err=sp_oacreate 'SQLDMO.Transfer',@TransferID OUT
IF @err<>0 GOTO lb_Err

--
设置目标服务器信息
EXEC @err=sp_oasetproperty  @TransferID,'DestServer',@ServerName
IF @err<>0 GOTO lb_Err

  --
设置连接用户
IF ISNULL(@UserName,N'')=N'' --
使用  Windows  身份登录
BEGIN
    EXEC @err=sp_oasetproperty @TransferID,'DestUseTrustedConnection',1
    IF @err<>0 GOTO lb_Err
END
ELSE
BEGIN
    EXEC @err=sp_oasetproperty @TransferID,'DestLogin',@UserName
    IF @err<>0 GOTO lb_Err

    EXEC @err=sp_oasetproperty @TransferID,'DestPassword',@pwd
    IF @err<>0 GOTO lb_Err
END

  --
设置复制对象信息
EXEC @err=sp_oasetproperty @TransferID,'DestDatabase',@Des_DB
IF @err<>0 GOTO lb_Err<o:p></o:p>

DECLARE tb CURSOR FAST_FORWARD LOCAL
FOR
SELECT Name FROM(
    SELECT KeyWord=N',D,',   Name=N'CopyAllDefaults' UNION ALL
    SELECT KeyWord=N',O,',   Name=N'CopyAllObjects' UNION ALL
    SELECT KeyWord=N',R,',   Name=N'CopyAllRules' UNION ALL
    SELECT KeyWord=N',P,',   Name=N'CopyAllStoredProcedures' UNION ALL
    SELECT KeyWord=N',T,',   Name=N'CopyAllTables' UNION ALL
    SELECT KeyWord=N',TR,',  Name=N'CopyAllTriggers' UNION ALL
    SELECT KeyWord=N',DT,',  Name=N'CopyAllUserDefinedDatatypes' UNION ALL
    SELECT KeyWord=N',V,',   Name=N'CopyAllViews' UNION ALL
    SELECT KeyWord=N',DATA,',Name=N'CopyData' UNION ALL
    SELECT KeyWord=N',DEL,', Name=N'DropDestObjectsFirst'
)A WHERE CHARINDEX(KeyWord,
        CASE WHEN ISNULL(@Obj_Type,N'')='' THEN ',O,DATA,' ELSE @Obj_Type END)>0
OPEN tb
FETCH tb INTO @src
WHILE @@FETCH_STATUS=0
BEGIN
    EXEC @err=sp_oasetproperty @TransferID,@src,1
    IF @err<>0 GOTO lb_Err
    FETCH tb INTO @src
END
CLOSE tb
DEALLOCATE tb

--
复制对象
EXEC @err=sp_oamethod @S_dbid,'Transfer',null,@TransferID
IF @err<>0 GOTO lb_Err

--
结束
SET @err=0
GOTO lb_Exit

--
错误处理
lb_Err:
    EXEC sp_oageterrorinfo NULL, @src OUT, @desc OUT 
    RAISERROR(N'
错误编号  %#x,  错误源  "%s",  错误描述  "%s"',16,1,@err,@src,@desc)
    RETURN -1

lb_Exit:
    EXEC sp_OADestroy @Dbid  
    EXEC sp_OADestroy @srvid 
    EXEC sp_OADestroy @TransferID 
    RETURN @err
GO

分享到:
评论
1 楼 lightgjc1 2011-11-17  
好,支持,赞一下

相关推荐

    设计 MySQL 表结构 - NineData.pdf

    在设计 MySQL 表结构时,NineData 提供了一个强大的可视化工具,使得用户无需手动编写 SQL 命令,只需通过鼠标操作即可完成整个过程。这个功能适用于 MySQL、MariaDB 和 OceanBase 数据源,大大简化了数据库开发者的...

    面向对象的通用数据结构.pdf

    EBTree是一种类模板,它可以存储任意类型的对象,被称为“软插件”,允许不同的应用程序直接使用这些通用的数据结构和方法。基本的数据元素Node在EBTree中扮演着至关重要的角色。Node类包含三个公共成员,Left指针...

    心希盼 C++ 数据结构 广义表

    在IT领域,数据结构是计算机科学中的核心概念,它涉及到如何高效地组织和存储数据,以便于进行各种操作。C++是一种广泛使用的编程语言,它提供了丰富的数据结构和算法库,使得开发人员能够构建高性能的应用程序。在...

    C语言通用数据类型链表的实现

    在C语言中,链表是一种常见的数据结构,用于存储线性序列的数据。传统的链表通常针对特定类型的数据进行设计,这意味着每一个链表只能存储一种类型的数据。然而,在某些情况下,我们可能需要构建一种可以存储任意...

    动态数组链表数据结构.docx

    动态数组链表数据结构是一种特殊的数据结构,它将动态数组和链表的优点结合起来,形成了一种高效、灵活的数据存储方式。下面我们将详细介绍动态数组链表数据结构的组成、特点、优缺点和应用场景。 动态数组 动态...

    通用MapReduce程序复制HBase表数据

    在本文中,我们将深入探讨如何使用通用MapReduce程序来复制HBase表数据。MapReduce是一种分布式计算模型,常用于处理大规模数据集,而HBase是一个分布式、列式存储的NoSQL数据库,适合处理大规模结构化数据。通过...

    通用SQL教程oracle,mysql,sqlserver

    此外,Oracle还提供了一些特有的功能,如PL/SQL(Procedural Language/SQL)——一种过程化的SQL,允许编写包含控制结构的存储过程和函数。 MySQL是一款开源、免费的关系数据库管理系统,它也遵循SQL标准,并且在...

    宏杉存储产品安装手册

    安全注意事项部分详细列出了多项与安装设备相关的安全措施,包括通用安全事项、用电安全、静电安全、激光安全、电池安全、EMC注意事项、磁盘使用及搬运过程中的注意事项等。这些内容对于保证安装过程和设备运行的...

    怎么最快地复制一张表?.pdf

    3. `--no-create-info`避免导出表结构,因为我们假设目标表已经存在。 4. `--set-gtid-purged=OFF`不包含与全局事务标识符(GTID)相关的信息。 5. `--result-file`指定输出文件的位置。 通过`mysqldump`命令生成的...

    多工作簿多工作表数据查询(通用、简易1、简易2)_excel_通用查询_VBa_

    - **循环结构**:在VBA中,可以使用`For Each`循环遍历工作簿和工作表,找到所需数据并存储到变量中。例如,遍历所有打开的工作簿中的每个工作表,然后使用`Find`或`FindNext`方法查找特定值。 - **数据处理**:...

    阿里云 专有云企业版 V3.7.1 表格存储 产品简介 20190124.pdf

    分布式存储层负责数据的分散存储,元数据管理维护表结构和分区信息,请求调度则根据负载均衡策略分发请求,一致性控制保障数据的一致性状态。 4. **使用条款与法律声明** 用户在使用表格存储服务时需遵守阿里云的...

    QQ邮箱存储平台SimpleDB

    - **定义**:SDB是一种用于存储用户邮件列表数据的通用存储平台。 - **适用范围**:主要用于存储索引类数据,如用户的邮件列表信息。 - **数据限制**:仅支持存储单条记录小于1MB的小数据,不支持存储邮件内容及附件...

    数据结构串数组和广义表PPT课件.pptx

    广义表是一种更通用的数据结构,它可以表示包含其他数据结构(如列表)的列表。广义表的定义包括表头(Head)和表尾(Tail),可以用来表示嵌套的数据结构。常见的操作有获取表头和表尾元素。 最后,课件提到了两种...

    数据结构c++代码(顺序表的代码,包括静态顺序表和动态顺序表)

    数据结构是计算机科学中的核心概念,它涉及到如何高效地存储和操作数据。在C++编程中,实现数据结构可以帮助我们更好地理解和应用算法。本压缩包包含的代码专注于顺序表,这是最基础也是最常见的数据结构之一。 ...

    自由表的建立与基本操作PPT学习教案.pptx

    - 复制表文件:可以复制表以备份数据或用于其他目的。 - 修改表的结构:在表已经创建后,可能需要添加、删除或修改字段,如更改字段类型、宽度等,这需要谨慎操作,以免影响现有数据。 此外,项目和项目管理器在...

    如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

    这种方法可以作为通用策略,适用于其他不直接支持BLOB复制的数据库系统。但每种数据库系统都有其特性,因此在实际操作中可能需要调整上述步骤以适应特定的数据库平台。 总之,将DB2中的BLOB数据复制到Oracle涉及多...

    Visual FoxPro常用命令分类表

    - `COPY PROCEDURES`:将存储过程复制到文本文件,便于分享和备份。 - `COPY STRUCTURE`:创建新表的结构,但不包含数据,用于快速创建类似表结构。 - `COPY STRUCTURE EXTENDED`:创建新表,包含原表的附加信息...

    中国矿业大学2018数据结构大纲

    图的邻接表和邻接矩阵是常见的两种存储结构。图的基本操作包括深度优先搜索(DFS)和广度优先搜索(BFS)遍历、最优树的生成、最短路径算法(如Dijkstra算法)、关键路径、拓扑排序等。 10. 查找算法和时间复杂度...

    一种基于SQL的数据库初始化通用方法.pdf

    常规的数据库安装配置包括多个步骤:数据库管理系统的安装与配置、数据库的创建、数据表、视图、存储过程、触发器的建立、各种键值的创建以及初始数据的加载等。数据库的初始化必须精确地复制开发阶段设计的结构,...

Global site tag (gtag.js) - Google Analytics