Копировать данные из таблицы в одной базе данных в другую отдельную базу данных - PullRequest
40 голосов
/ 02 июня 2009

В основном у меня есть две базы данных на SQL Server 2005.

Я хочу взять данные таблицы из одной базы данных и скопировать их в таблицу другой базы данных.

Я пробовал это:

SELECT * INTO dbo.DB1.TempTable FROM dbo.DB2.TempTable

Это не сработало.

Я не хочу использовать восстановление, чтобы избежать потери данных ...

Есть идеи?

Ответы [ 10 ]

61 голосов
/ 02 июня 2009

SELECT ... INTO создает новую таблицу. Вам нужно будет использовать INSERT. Кроме того, база данных и имена владельцев поменялись местами.

INSERT INTO DB1.dbo.TempTable
SELECT * FROM DB2.dbo.TempTable
13 голосов
/ 02 июня 2009

SELECT * INTO требует, чтобы таблица назначения не существовала.

Попробуйте это.

INSERT INTO db1.dbo.TempTable
 (List of columns here)
SELECT (Same list of columns here)
FROM db2.dbo.TempTable
8 голосов
/ 02 июня 2009

Это db1.dbo.TempTable и db2.dbo.TempTable

Схема именования из четырех частей:

ServerName.DatabaseName.Schema.Object

5 голосов
/ 02 июня 2009

Трудно сказать без какой-либо идеи, что вы подразумеваете под "это не сработало". Существует множество вещей, которые могут пойти не так, и любой совет, который мы дадим при устранении неполадок в одном из этих путей, может привести вас к дальнейшему поиску решения, которое может быть действительно простым.

Вот кое-что, что я искал бы, хотя

Идентификационная вставка должна быть включена в таблицу, в которую вы импортируете, если эта таблица содержит поле идентификатора, и вы вводите его вручную. Identity Insert также может быть включен только для 1 таблицы за раз в базе данных, поэтому вы должны не забыть включить ее для таблицы, а затем отключить ее сразу после завершения импорта.

Также попробуйте перечислить все свои поля

INSERT INTO db1.user.MyTable (Col1, Col2, Col3)
SELECT Col1, COl2, Col3 FROM db2.user.MyTable
3 голосов
/ 14 октября 2016

Не забудьте вставить SET IDENTITY_INSERT MobileApplication1 ON наверх, иначе вы получите ошибку. Это для SQL Server

SET IDENTITY_INSERT MOB.MobileApplication1 ON
INSERT INTO [SERVER1].DB.MOB.MobileApplication1 m
      (m.MobileApplicationDetailId,
       m.MobilePlatformId)
SELECT ma.MobileApplicationId,
       ma.MobilePlatformId 
FROM [SERVER2].DB.MOB.MobileApplication2 ma
2 голосов
/ 04 июня 2014

Мы можем назвать три части, например database_name..object_name

Приведенный ниже запрос создаст таблицу в нашей базе данных (без ограничений)

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

В качестве альтернативы вы можете:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable

Если ваша таблица назначения существует и пуста.

1 голос
/ 24 октября 2016

Я предпочитаю это.

INSERT INTO 'DB_NAME' 
(SELECT * from 'DB_NAME@DB_LINK')
MINUS 
(SELECT * FROM 'DB_NAME');

Что означает вставку того, что не включено в DB_NAME, но включено в DB_NAME@DB_LINK. Надеюсь, что это поможет.

1 голос
/ 21 апреля 2016
INSERT INTO DB1.dbo.TempTable
SELECT * FROM DB2.dbo.TempTable

Если мы используем этот запрос, он вернет Primary key error .... Так что лучше выбрать, какие столбцы нужно переместить, например

INSERT INTO db1.dbo.TempTable // (List of columns here)
SELECT (Same list of columns here)
FROM db2.dbo.TempTable
0 голосов
/ 28 апреля 2017

Это успешно работает.

INSERT INTO DestinationDB.dbo.DestinationTable (col1,col1)
 SELECT Src-col1,Src-col2 FROM SourceDB.dbo.SourceTable
0 голосов
/ 02 июня 2009

Попробуйте это

INSERT INTO dbo.DB1.TempTable
    (COLUMNS)
    SELECT COLUMNS_IN_SAME_ORDER FROM dbo.DB2.TempTable

Это произойдет только в том случае, если элемент в dbo.DB2.TempTable уже находится в dbo.DB1.TempTable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...