SQL复制表结构的通用存储过程(转)

-- Transfer对象的重要属性

-- 1. 属性

属性名                            类型                描述
--------------------------------- ------------------- --------------------
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    脚本类型

-- 2. 重要方法: 

方法名称                    功能描述
--------------------------- --------------------------
AddObject                   增加对象
AddObjectByName             通过对象名称增加对象

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 所有对象,D 默认值,R 规则,P 存储过程
                                -- 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()

--创建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

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

转载于:https://www.cnblogs.com/zhuor/archive/2006/08/11/474479.html

仿真每日一练 | Workbench下薄板疲劳分析 今天给大家介绍Workbench下薄板疲劳分析,采用稳态分析模块进行评估。完成求解后,插入疲劳工具,同时插入对应的寿命进行查看,如图7和图8所示。采用稳态分析模块,导入几何模型,效果如图1。添加固定约束与扭矩,同时添加速如图4所示。主要包括7要素,对应的类型见图2。求解完成后查看应力,如图6所示。1-1-3、有限元系统模型构建。1-2-1、加载条件/边界条件。1-1-1、几何模型构建。1-1-2、材料定义。1-2-2、求解设置。1-3-1、查看结果。1-3-2、评估结果。1-3-3、修正结果。 阅读详情

相关推荐

IEC 62061 总结与适用范围

IEC 62061 是国际电工委员会(IEC)制定的。

cactusDaYe的博客 1048

MSSQLServer 中使用SQLDMO.Transfer 实现数据迁移_

1. 属性 属性名 类型 描述--------------------------------- ------------------- --------------------CopyAllDefaults Boolean 所有默认值CopyAllObjects

angelior天地 1645

别再手动算K值了!ZEMAX中两种锥透镜建模方法详解(标准面 vs. 轴锥面)

本文详细解析了ZEMAX中锥透镜的两种建模方法:标准面与轴锥面。通过对比两者的精度、计算效率和适用场景,帮助工程师在激光整形、光束匀化等应用中做出最优选择,并提供了参数设置和异常排查的实用技巧。

weixin_42548874的博客 291

SQL Server的存储过程复制执行

SQL Server的事务复制时有个问题让人困扰,就是在发布端的一个语句,如果涉及n条记录,则在订阅端会执行n次。 比如 delete T1 where id between 1 and 50 如果发布端有50条记录,则订阅服务器会自动将这个语句翻译成delete相关的存储过程,执行50次!! 其实SQL Server针对这种情况给了一种解决方案,就是复制存储过程的执行。

无知无畏的专栏 4345

复制表结构通用存储过程

复制表结构通用存储过程 -- Transfer对象的重要属性 -- 1. 属性 属性名                            类型                描述--------------------------------- ------------------- --------------------CopyAllDefaults                Boo

zjcxc(邹建)的Blog - SQL Server 1万+

SqlServer数据库将另一个数据的的存储过程复制到本地数据库的方法

SqlServer数据库将另一个数据的的存储过程复制到本地数据库的方法 右键数据库-》任务-》生成脚本,勾选要生成的存储过程,把生成的脚本在新数据库中执行

李大C的博客 2950

MySQL|表的复制存储过程、触发器、视图、函数、数据库权限

MySQL|表的复制存储过程、触发器、视图、函数、数据库权限

weixin_42054526的博客 255

SQL复制表结构

sql复制表结构和数据

weixin_38710804的博客 1万+

复制表结构和数据SQL语句

1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 2.只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2 即:让WHERE条件不成立. 方法二:(由tianshibao提供) CREATE TABLE 新表 LIKE 旧表 3.复制旧表的数据到新表(假设两个表结构一样) INSERT INTO 新表 ...

Now do it 7808

SQL server复制表结构复制表数据

1,复制表结构 select * into 新表名称 from 旧表名称; 这个SQL语句可以将表的数据也复制过来 注意:像主键,外键这种属性是无法复制过来的 法2: 也可以右键数据库—任务—生成脚本 ,根据界面向导选择需要生成脚本的数据库,将生成的脚本显示在查询表框, 然后修改其中的旧表名称, 再次运行 备注:这种办法可以进行所有属性的设置,主键,外键等 2,复制表数据 注意:因为是复制数...

qq_36636312的博客 1万+

sqlserver 复制表结构,复制表数据

sqlserver 复制表结构在企业管理器中,全选想要复制的表,右击所有任务/生成SQL脚本.保存为一个*.sql文件.再在查询分析器中打开.在菜单栏下面中间位置,选择一个数据库,然后把刚才保存的sql文件复制进去,点勾,再按F5执行.表结构复制成功. 复制表数据使用SQL Server 2000自带的“生成SQL脚本”工具,可以生成创建表、视图、存储过程等的SQL脚本。那么,能否将表中的数据

4364

如何快速复制 SQL 表结构创建新表

快速复制 SQL 表结构创建新表是数据库管理中的一项重要技能。使用特定的 SQL 语句(如 CREATE TABLE … LIKE, CREATE TABLE AS SELECT)利用数据库系统提供的元数据查询功能使用数据库管理工具的图形界面功能通过命令行工具或 API 来实现自动化确保理解每种方法的优缺点和适用场景注意复制过程中可能遗漏的元素(如约束、索引、触发器等)考虑性能影响,特别是在处理大型表时遵循最佳实践,如命名规范、权限管理和版本控制。

一个8年大数据开发工程师的碎碎念 3236

oracle建表复制表结构,ORACLE复制表结构

一般网上的方法:select * from newtable as select * from oldtable where 1=1; --复制表结构以及数据按where条件查询出的数据select * from newtable as select * from oldtable where 1=2; --只复制表结构但是上面的语法不会复制旧表的默认值、注释、键和索引,因此想要完美的复制表结...

weixin_39876145的博客 4983

sql复制表结构和数据_SQL复制

sql复制表结构和数据In real time we do face situations where we need to copy data from one table to another table or when we need to create a table from a set of data from the table. We will discuss in this ar...

从零开始的教程世界 1991

SQL语句实现SQL Server及ACCESS复制表结构表结构及内容到新的表

SQL语句实现,SQL Server 2000 及ACCESS复制旧表OldTable的结构,或结构及内容到新的表NewTable 两个都试过了,下面的代码在这两个数据库中(SQL Server 2000 及ACCESS)都是可以通过的。 --复制表结构为新的表 select * into NewTable from OldTable where 1=2 --复制表结构及内容到新的

lanpy88的专栏 1万+

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

-- Transfer对象的重要属性-- 1. 属性 属性名                            类型                描述--------------------------------- ------------------- --------------------CopyAllDefaults                Boolean    

pansha的专栏 752

复制表结构通用存储过程

-- transfer对象的重要属性 -- 1. 属性 属性名 类型 描述--------------------------------- -...

cuankuangzhong6373的博客 137

SQL Server高可用性】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?

SQL Server上配置好数据库复制后:       1、如果给表加了字段,会不会复制到订阅服务器呢?如果是删除1个字段呢?       2、如果新创建了1个表,会不会被同步过去呢?       3、如果新建了一个存储过程,会不会同步过去呢? 本文将会通过实验,解决上述问题。 1、首先,需要配置数据库复制。 这里为了简单起见,用了机器上的2个SQL Server 2

SQL Server探索 3803

sql 复制表结构,带主键

在网上查的复制表结构两种方法, 1: create new_table_name from (select * from old_table_name where 1=2); 只复制表结构,没有主键,没有数据 2: create new_table_name like old_table_name 复制表结构,带数据,没有主键 3: ...

xujingcheng123的博客 1917

sql复制表结构和数据

案例一: 在informix中需要吸纳建立一个相同字段的新表然后insert into newtable select × from oldtable   全部复制select * into NewTable from OldTable 复制结构select * into NewTable from OldTable where 1=2 复制数据insert into NewTab

changxiaoyanzi的专栏 955

WindowsVS2019环境下C++编译GSL库动态库静态库

我想做一个最小二乘法正太拟合曲线,网上都是python调用matlab进行拟合,我想用C++拟合曲线,发现网上有开源库GSL也有计算方法;这工程就是用VS2019编译的GSL动态库,测试项目中包括GSL生成的动态库静态库。

scratch与物理天文-探月工程模拟.sb3

scratch(图形化编程工具)实现探月工程模拟器。

上一篇: 网站策划5大趋势
下一篇: 应用ArcIMS构建GMap风格的地图应用
weixin_30847865
博客等级 码龄11年 87粉丝 1406原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值