我在服务器中有一个带有identity
列的表,并且在另一个服务器中有另一个具有相同结构的表。现在我想将所有数据从一个表复制到另一个表但是我无法帮助它...
我已经创建了一个链接服务器..
我用这个:
insert into [server].[database].[dbo].[table1]
select *
from table2
我也在*
insert into [server].[database].[dbo].[table1]
select column1, column2
from table2
我该怎么办?
答案 0 :(得分:7)
如果要插入另一个也有标识列的表,则需要明确定义要插入的列的列表,并省略identity
列:
insert into [server].[database].[dbo].[table1] (col1, col2)
select column1, column2
from table2
这样,SQL Server可以在目标表中插入标识值
<强>更新强>
两种情况:
(1)您希望将旧表中的标识列中的现有值插入新表中 - 在这种情况下,您需要在查询中使用SET IDENTITY_INSERT ON/OFF
:
SET IDENTITY_INSERT [192.168.1.6].[audit].[dbo].[tmpDTTransfer] ON
INSERT INTO [192.168.1.6].[audit].[dbo].[tmpDTTransfer] (id, code, transfer1)
SELECT
id, code, transfer1
FROM
tmpDTTransfer
SET IDENTITY_INSERT [192.168.1.6].[audit].[dbo].[tmpDTTransfer] OFF
(2)如果您不想插入现有的标识值,只想插入其他列并让SQL Server在目标表中分配新的标识值,那么您 don您的查询中需要使用 SET IDENTITY_INSERT ON/OFF
:
INSERT INTO [192.168.1.6].[audit].[dbo].[tmpDTTransfer] (code, transfer1)
SELECT
code, transfer1
FROM
tmpDTTransfer
但是在任何你,你应该始终明确定义要插入到目标表中的列的列表。
请勿使用:
INSERT INTO [192.168.1.6].[audit].[dbo].[tmpDTTransfer]
.......
但改为使用
INSERT INTO [192.168.1.6].[audit].[dbo].[tmpDTTransfer] (Code, Transfer1)
.......
或
INSERT INTO [192.168.1.6].[audit].[dbo].[tmpDTTransfer] (Id, Code, Transfer1)
.......
或任何你需要的东西。关于你要插入的内容明确!
答案 1 :(得分:2)
为表格设置IDENTITY_INSERT:
SET IDENTITY_INSERT [server].[database].[dbo].[table1] ON
insert into [server].[database].[dbo].[table1]
select column1,column2
from table2
SET IDENTITY_INSERT [server].[database].[dbo].[table1] OFF
答案 2 :(得分:1)
如果您不一定需要使用SQL脚本,那么您可以使用SQL Server导入和导出向导来执行此操作。 您可以阅读教程here on MSDN。