选择into语句,其中source是其他数据库

时间:2011-09-26 11:07:20

标签: sql sql-server sql-server-2008 sql-server-2012 sqlbulkcopy

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

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

所以我想要像

这样的东西
USE newDB;
GO
SELECT *
INTO newTable
FROM OldDb.oldTable WITH (KEEPIDENTITY);
GO

任何人都有建议让这个可行吗?

6 个答案:

答案 0 :(得分:4)

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

Select  *
INTO [NEW DB].dbo.Lab_Tests
from [OLD DB].dbo.Lab_Tests

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

insert into newTable
select col1,col2  from OldDB.dbo.OldTable

答案 3 :(得分:1)

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

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

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

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

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

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

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

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

  12.   

PS:版本无关紧要,因为您必须在SQL Server 2008的情况下传输假设为当前版本的数据库,并且在复制数据库之后,您可以更改数据库的版本。

  

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

答案 4 :(得分: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;

答案 5 :(得分:0)

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

Select * 
Into denali.dbo.newTable 
FROM oldTable

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