【问题标题】:How to copy data and schema of all tables into a different database on the same server? [closed]如何将所有表的数据和架构复制到同一台服务器上的不同数据库中? [关闭]
【发布时间】:2013-07-01 13:36:25
【问题描述】:

使用脚本 (但是不使用数据导入/导出,不使用备份还原,不使用数据库副本) 如何复制完整的表(架构和数据)从同一服务器上的一个数据库到同一服务器上的另一个数据库?

我已经尝试过上面用斜体表示的操作;但是,由于用户权限等原因,我无法使用这些方法。

也许这会起作用:

 SELECT *
 INTO newdb.dbo.newtable
 FROM olddb.dbo.oldtable

但我想将此应用于每个表(大约 100 个表)。

【问题讨论】:

  • 为什么不获取备份并恢复它的权限? Gobs and gobs and gobs 比任何其他方法都简单。
  • 另外,与其问“我该如何以某种麻烦的方式做到这一点,因为逻辑方式被破坏了”,为什么不问一个完全不同的问题,比如“我该如何修复这个被破坏的东西” ?当我爆胎时,我不会打电话给 AAA 并要求他们开车送我上班,而是请他们来修理我的爆胎。
  • 可能,这就是为什么您应该解决实际问题而不是拼命寻找无意义的解决方法。
  • 是的,复制向导提供两个选项:分离/附加或 SMO。我猜测基于此以及您单击 Next > Next > Next 太快的权限问题。
  • @АртёмЦарионов 是的,所以请转到Connect 并针对此错误发布一些反馈,看看他们对此有何评论。

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

如果你是真正的系统管理员,我不明白备份和恢复有什么问题。

BACKUP DATABASE <DatabaseName, sysname, DatabaseName>
TO DISK=N'<backup_location, varchar, BackupLocation>.bak'
WITH INIT, FORMAT, COMPRESSION, COPY_ONLY

RESTORE DATABASE <NewDatabaseName, sysname, NewDatabaseName>
FROM DISK = N'<backup_location, varchar, BackupLocation>\
    <DatabaseName, sysname, DatabaseName>.bak'
WITH 
    MOVE '<DataFileName, sysname, DataFileName>' TO '<DataMDFPath, nvarchar(600), DataMDFPath>',
    MOVE '<LogFilePath, sysname, LogFilePath>' TO '<LogLDFPath, nvarchar(600), LogLDFPath>',
    REPLACE;

在这里,看,我什至为你templated

【讨论】:

  • 我应该悬赏这个问题。
  • @FreshPrinceOfSO 这将是阴暗的
  • @swasheck 非常感谢!!这行得通!
  • @АртёмЦарионов 为什么当我建议它作为对您问题的第一条评论时这不起作用?
【解决方案2】:

如果您有 SSMS,您可以右键单击数据库并选择“脚本数据库为”->“创建到”。这将为您想要的所有对象(表、索引、视图等)生成 DDL 脚本

在你运行这些之后,使用:

SELECT 'INSERT newdb..'+name+' SELECT * FROM olddb..'+name FROM sys.tables

生成复制命令。如果您有计算列,则需要加入 sys.columns 表以过滤掉这些列。如果您有多个模式,则需要指定它们。您还需要根据外键层次结构对这些 DML 命令进行排序。只有 100 个表,手动完成是可行的。

【讨论】:

    【解决方案3】:

    您使用的是 Microsoft SQL Server Management Studio 吗?如果是这样……


    您可以使用 Script Table As... 选项并选择 CREATE TO 选项下的 New Query Editor Form

    从那里您应该能够更改表名或目标数据库。

    您可以同时使用此处的信息:https://stackoverflow.com/a/7515236/2543917 来移动您的数据。

    如果您需要更多实际的代码示例,请告诉我,我可以提供。

    【讨论】:

    • 不过,要为 100 个表执行此操作非常麻烦。
    • 没错,但这是一种方法,如果您不能使用原始帖子中描述的方法。再说一次,我不知道为什么有人有权创建表,但不能创建备份...
    • @TrustedInSci 创建表需要数据库中的 DDL 权限。创建备份需要文件系统的服务器级权限。有区别
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多