9

如何将数据从一个数据库复制到另一个具有相同表结构的数据库中并保留密钥标识?

我使用 Sql Server 2012 “Denali”,我想从 Sql Server 2008 数据库中复制一些数据。我拥有的表完全相同,但我希望将旧数据库中的数据放入新的“Denali”数据库中。数据库位于不同的服务器上。

所以我想要类似的东西

USE newDB;
GO
SELECT *
INTO newTable
FROM OldDb.oldTable WITH (KEEPIDENTITY);
GO

任何人有建议使这个可行?

4

6 回答 6

11

今天遇到了这个问题,但它不起作用:(如果两个数据库都在同一台服务器上,则必须使用数据库的完全限定名称。不要忘记 .dbo 模式

Select  *
INTO [NEW DB].dbo.Lab_Tests
from [OLD DB].dbo.Lab_Tests
于 2014-10-18T03:21:58.663 回答
4

配置链接服务器并在查询中引用它。您可能也需要使用IDENTITY_INSERT

SSMS 中内置的 SSIS 组件还可以从不同的源(XML、平面文件或本地/远程服务器)加载数据。

于 2011-09-26T11:42:06.093 回答
3

如果您的两个数据库都在同一台服务器上,那么您可以这样做:

insert into newTable
select col1,col2  from OldDB.dbo.OldTable
于 2011-09-26T11:17:00.807 回答
1

将数据库从一台服务器复制到另一台服务器时(远程)有一定的限制。

因此,您必须按照步骤将数据库从一台服务器完全转移到具有相同身份和约束的另一台服务器。

  1. 简而言之,生成数据库脚本,即右键单击数据库 > 任务 > 生成脚本 > 选择数据库 > 将这些标记为真:触发器、索引、主键和外键以及其他(如果有)。> 选择对象类型:将除用户之外的所有标记都标记为真(您可以稍后在新服务器上手动创建用户)。> 选择所有表、SP 和其他对象 > 脚本到新窗口或文件(如您所愿) > 完成。

  2. 生成脚本以“创建数据库”并在服务器上运行它。

  3. 运行步骤 1. 在新服务器上编写脚本,检查是否在查询窗口中选择了新数据库。

  4. 禁用新服务器上的所有约束 >EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

  5. 我认为使用向导很快,所以使用旧数据库服务器中的数据库导出向导将数据从旧数据库服务器传输到新数据库服务器。

  6. 再次,启用新服务器上的所有约束 >EXEC sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

PS:版本无关紧要,如果您的情况是SQL Server 2008,您必须转移假设为当前版本的数据库,并且复制数据库后您可以更改数据库的版本。

数据库属性 > 选择一个页面:“选项”> 兼容性级别 > 从下拉列表中选择版本。

于 2011-09-27T04:59:59.480 回答
0

如果要在字段中插入显式值,IDENTITY则可以使用SET IDENTITY_INSERT table OFF

CREATE TABLE dbo.Destination
(
    Id INT IDENTITY(1,1) PRIMARY KEY
    ,Name NVARCHAR(100) NOT NULL
);

INSERT  dbo.Destination
VALUES  ('A'), ('B'), ('C');
GO

SET IDENTITY_INSERT dbo.Destination ON;

INSERT  dbo.Destination(Id, Name)
SELECT  T.Id, T.Name
FROM    (VALUES (10,'D'), (11,'E')) AS T(Id, Name); --or SourceDB.Schema.SourceTable

SET IDENTITY_INSERT dbo.Destination OFF;
GO

INSERT  dbo.Destination
VALUES  ('????????');
GO

SELECT  *
FROM    dbo.Destination

DROP TABLE Destination;
于 2011-09-26T11:42:38.490 回答
0

假设您现在位于旧数据库实例中。
你可以做的是:

Select * 
Into denali.dbo.newTable 
FROM oldTable

它就像将 oldTable(结构和内容)复制到 newTable 并将其导出到另一个数据库。

于 2011-10-31T07:47:46.257 回答