如何将所有表的数据和模式复制到同一服务器上的不同数据库中?

时间:2013-07-03 18:03:52

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

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

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

也许这会奏效:

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

但我想将它应用于每张桌子(大约100张桌子)。

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

如果您有SSMS,则可以右键单击数据库并选择“Script Database As” - &gt; “创造至”。这将为您想要的所有对象(表,索引,视图等)生成DDL脚本

运行后,请使用:

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

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

答案 2 :(得分:-4)

您使用的是Microsoft SQL Server Management Studio吗?如果是的话......


您可以使用脚本表格为... 选项,然后选择 CREATE TO 选项下的新查询编辑器表单

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

与此相结合,您可以使用此处的信息:https://stackoverflow.com/a/7515236/2543917来移动您的数据。

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