Выберите в заявлении, где источник другой базе


Как скопировать данные из одной БД в другую БД с той же структурой таблиц и сохранить ключевые идентификаторы?

Я использую Sql Server 2012 "Denali"и хочу скопировать некоторые данные из базы данных Sql Server 2008. Таблицы, которые у меня есть, точно такие же, но я хочу, чтобы данные из старой базы данных попали в новую базу данных "Denali". Базы данных находятся на разных серверах.

Поэтому я хочу что-то вроде

USE newDB;
GO
SELECT *
INTO newTable
FROM OldDb.oldTable WITH (KEEPIDENTITY);
GO
У кого-нибудь есть предложение, чтобы сделать это осуществимым ?
6 6

6 ответов:

Настройте связанный сервер и ссылайтесь на него в своем запросе. Возможно, Вам также потребуется использовать IDENTITY_INSERT.

Компоненты SSIS, встроенные в SSMS, также могут загружать данные из различных источников (XML, плоский файл или локальный / удаленный сервер).

Сегодня была эта проблема, и она не сработала : (вы должны использовать полные имена баз данных, если обе базы данных находятся на одном сервере. Не забывайте о своем .схема dbo .

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

Если у вас обе базы данных на одном сервере, то вы можете сделать это следующим образом:

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

Существуют определенные ограничения при копировании базы данных с одного сервера на другой (удаленно).

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

  1. Короче говоря, сгенерируйте сценарий базы данных, т. е. щелкните правой кнопкой мыши база данных > задачи > сгенерировать сценарии > выбрать базу данных > отметить эти true: триггеры, индексы, первичные и внешние ключи и другие, если таковые имеются. > выбранный объект Типы: отметьте все true, кроме User (позже вы можете создавать пользователей на новом сервере вручную). > Выберите Все таблицы, 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, и после копирования базы данных вы можете изменить версию базы данных.

Свойства базы данных > выберите страницу: "параметры" > уровень совместимости > выберите версию из выпадающего списка.

Если вы хотите вставить явные значения в поле 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;

Предположим, что вы находитесь в старом экземпляре базы данных.
Что вы можете сделать, это:

Select * 
Into denali.dbo.newTable 
FROM oldTable

Это как скопировать oldTable (структура и содержимое) в newTable и экспортировать его в другую базу данных.