2015-08-14 2 views
2

У меня есть таблица с столбцом identity на сервере и другая таблица с той же структурой на другом сервере. Теперь я хочу скопировать все данные из одной таблицы в другую таблицу, но я не могу помочь ...Как скопировать данные в столбец идентичности?

Я уже создал связанный сервер ..

Я использую это:

insert into [server].[database].[dbo].[table1] 
    select * 
    from table2 

Я также использую этот запрос без столбца идентификации в месте *

insert into [server].[database].[dbo].[table1] 
    select column1, column2 
    from table2 

Что мне делать?

ответ

3

Если вы хотите вставить в другую таблицу, которая также имеет столбец идентификаторов, то вам нужно явно определить список столбцов вы вставляя в и опустить identity столбец:

insert into [server].[database].[dbo].[table1] (col1, col2) 
    select column1, column2 
    from table2 

Таким образом, SQL Server можно вставить значения идентификационных данных в целевой таблице, как должен

Update:

два сценария:

(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 S ервере присвоить новые значения идентификаторов в целевой таблице, то вы не нужно использовать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) 
    ....... 

или что вам нужно. Будьте явным о том, что вы хотите вставить!

+0

мой table1 имеет эти три столбца идентификатор \t, код \t, transfer1 –

+0

@JeffAtwood: тогда ** выбрать ** '' Code' и Transfer1' из таблицы 1, и убедитесь, чтобы определить ** **, которые столбцы, чтобы вставить это в вашей целевой таблице –

+0

я использую это, но его не работает: -... SET IDENTITY_INSERT [192.168.1.6] [аудит] [DBO] [tmpDTTransfer] ON вставки в [192.168.1.6 ] [проверка]. [dbo]. [tmpDTTransfer] выбрать код, transfer1 от tmpDTTransfer SET IDENTITY_INSERT [192.168.1.6]. [audit]. [dbo]. [tmpDTTransfer] OFF –

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 
+0

Msg 117, Level 15, State 1, Line 5 Имя объекта '192.168.1.6.audit.dbo.tmpDTTransfer' содержит больше, чем максимальное количество префиксов. Максимальный - 2. это ошибка с этим запросом. –

+0

@JeffAtwood показать оригинальный запрос – Backs

+0

SET IDENTITY_INSERT [192.168.1.6]. [Audit]. [Dbo]. [TmpDTTransfer] ВКЛ. Вставить в [192.168.1.6]. [Audit]. [Dbo]. [TmpDTTransfer] select code , transfer1 от tmpDTTransfer SET IDENTITY_INSERT [192.168.1.6]. [audit]. [dbo]. [tmpDTTransfer] OFF –

1

Если вам не нужно обязательно использовать SQL-скрипт, вы можете сделать это с помощью мастера импорта и экспорта SQL Server. Вы можете прочитать урок here on MSDN.

Смежные вопросы