У мене є база даних під назвою foo та база даних під назвою bar. У мене є таблиця в foo під назвою tblFoobar, яку я хочу перемістити (дані та всі) до рядка бази даних з foo бази даних. Що таке оператор SQL для цього?
У мене є база даних під назвою foo та база даних під назвою bar. У мене є таблиця в foo під назвою tblFoobar, яку я хочу перемістити (дані та всі) до рядка бази даних з foo бази даних. Що таке оператор SQL для цього?
Відповіді:
На SQL Server? і на тому ж сервері баз даних? Використовуйте три найменування частини.
INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar
Це просто переміщує дані. Якщо ви хочете перемістити визначення таблиці (та інші атрибути, такі як дозволи та індекси), вам доведеться зробити щось інше.
Завдання "Імпорт даних" студії управління SQL Server (клацніть правою кнопкою миші на ім'я БД, а потім завдання) зробить більшу частину цього для вас. Запустіть його з бази даних, в яку потрібно скопіювати дані.
Якщо таблиць не існує, вона створить їх для вас, але вам, ймовірно, доведеться відтворити будь-які індекси та ін. Якщо таблиці існують, вони додадуть нові дані за замовчуванням, але ви можете їх відрегулювати (відредагувати відображення), щоб видалити всі існуючі дані.
Я цим постійно користуюся, і це працює досить добре.
WHERE
умову за допомогою завдання Імпорт даних? Мені не вдалося знайти спосіб це зробити.
Це має працювати:
SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable
Він не буде копіювати вмісти, параметри за замовчуванням або індекси. Створена таблиця не матиме кластерного індексу.
Можна також:
INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable
Якщо таблиця призначення існує і порожня.
INSERT INTO...
) працювала для мене в Oracle.
Якщо це лише один стіл, то все, що вам потрібно зробити - це
Одне, що вам доведеться врахувати, - це інші оновлення, такі як переміщення інших об'єктів у майбутньому. Зауважте, що у ваших таблицях джерел та пунктах призначення немає одного імені. Це означає, що вам також доведеться вносити зміни, якщо ви залежите від об'єктів, таких як представлення даних, збережені процедури та інші.
З одним або декількома об'єктами ви можете перейти вручну без будь-яких проблем. Однак, коли є декілька оновлень, інструменти порівняння сторонніх розробників дуже зручні. Зараз я використовую ApexSQL Diff для міграції схем, але ви не можете помилитися з будь-яким іншим інструментом там.
Сценарій create table
в студії управління, запустіть цей скрипт у бар, щоб створити таблицю. (Клацніть правою кнопкою миші таблицю в Explorer Explorer, таблицю сценаріїв як, create to ...)
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
SET IDENTITY_INSERT TblName ON
.
Ви також можете скористатись майстром створення сценаріїв сценаріїв SQL Server, щоб допомогти в створенні сценаріїв SQL, які можуть виконувати такі дії:
Хороший приклад робочого процесу для SQL Server 2008 зі знімками екрана, показаними тут .
Ви можете піти так: (загальний приклад)
insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
Також якщо вам потрібно створити імена стовпців, а також вставити пункт вставки, використовуйте:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName')
Скопіюйте результат і вставте у вікно запиту, щоб представити назви стовпців таблиці, і навіть це виключає стовпчик ідентичності:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName') and is_identity = 0
Пам'ятайте, що сценарій копіювання рядків буде працювати, якщо бази даних належать до одного і того ж місця.
Ви можете спробувати це.
select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>
Ім'я сервера необов’язково, якщо обидві БД є на одному сервері.
Скопіюйте дані
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details