Копирование таблиц из одной базы данных в другую в SQL Server

У меня есть база данных под названием foo и база данных под названием bar. У меня есть таблица в foo под названием tblFoobar, которую я хочу переместить (данные и все) на панель базы данных из базы данных foo. Какая инструкция SQL для этого предназначена?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
326
0
840 870
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

На SQL Server? а на одном сервере базы данных? Используйте трехчастное именование.

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar

Это просто перемещает данные. Если вы хотите переместить определение таблицы (и другие атрибуты, такие как разрешения и индексы), вам придется сделать что-то еще.

Я полагаю, вам также придется отдельно установить разрешения для таблиц.

Ken Ray 09.10.2008 19:31

Если вам также нужно выполнить вставку идентификаторов, в мастере импорта данных есть опция для этого ^^ - ссылаясь на другой ответ

Clarence Liu 30.08.2013 08:07

@TahaRehmanSiddiqui: Потому что он отвечает на вопрос;) Он не спрашивал, как скопировать его между серверами баз данных. Но большинство людей, ищущих этот ответ, попадают сюда, потому что Google дает его как первый результат :)

Maarten Kieft 11.04.2014 10:52

Можно ли это использовать с оператором WHERE? Например, если бы я хотел вставить только строки, относящиеся к определенному диапазону дат, а не всю таблицу.

Ryan B 30.01.2015 19:29

@RyanB да, это разрешено.

Amy B 31.01.2015 01:33

Этот ответ был бы лучше, если бы он показал, как скопировать определение таблицы.

Ahmed 25.12.2015 22:36

Моя ошибка новичка: при использовании Oracle я получаю ошибку «отсутствует правая круглая скобка», если я использую круглые скобки вокруг второй группировки полей в этом операторе SELECT. Слово мудрым, не делайте моей ошибки! Оставьте круглые скобки для этой второй группы! :)

vapcguy 19.07.2016 16:52

Как это набрало 171 голосов, а ответ Райана «11 окт. 2011 в 23:41» получил только 13 голосов?!? Ryan - это только ответ, который отвечает на вопрос o.p. полностью. Потому что он обрабатывает эти сценарии (которые, кстати, OP НЕ исключил из своего q.): A) Идентичность (общий очень), b) Ограничения, c) Триггеры, d) Индексы, e) Разрешения, d) копирование схемы И Данные (Подсказка: часть «и все» в операторе «(данные и все)» также подразумевает схему.) И е) генерирует «оператор SQL», который оператор уточнил, что, даже если он не имел в виду буквально, лучше иметь, чем нет.

Tom 15.06.2017 00:51

@Tom OP и многие люди, которые задаются этим вопросом, ищут «оператор SQL», а не инструмент.

Amy B 15.06.2017 01:28

Примечание. Ответ Райана «11 октября 2011 г., 23:41» применим только в том случае, если количество строк не является «чрезмерным» (например, таблицы поиска / малых транзакций) и нет «больших» значений столбца. Для них я бы использовал ответ Райана только для создания сценария для создания таблицы (включая атрибуты столбца и суб-объекты), а потом использовал бы ответ Дэвида Б. «Вставить в выбор». Для отдельных таблиц (вместо Ryan A) вы также можете использовать SSMS, обозреватель объектов, таблицу правой кнопкой мыши, таблицу сценариев как, CREATE To, но вы должны сначала убедиться, что инструменты, параметры, обозреватель объектов SQL Server, параметры сценариев установить по желанию.

Tom 16.06.2017 20:41

Как это работает, когда две базы данных находятся на разных серверах / требуют разных строк подключения?

Alexander Ryan Baggett 25.08.2017 23:06

Совет: В SMSS можно перетащить столбцы «Папка» из обозревателя объектов в окно запроса. Это избавляет от необходимости набирать список полей вручную.

Brian 10.01.2018 21:29

Это должно работать:

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

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

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

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

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

Есть ли проблема, если вы сначала скопируете структуру базовой таблицы (поля и данные), а затем примените сценарий пластырь для создания разрешений, индексов, ограничений и расширенных свойств?

leoinfo 09.10.2008 20:13

При этом не будут вставляться значения для столбцов идентификаторов в SQL Server 2008. Это разрешено только при использовании списка столбцов и IDENTITY_INSERT для целевой таблицы.

Lucas Wilson-Richter 23.10.2012 08:30

@Lucas - Вы "наполовину" правы :). Однако первый оператор SQL копирует ВСЕ данные, включая значения в столбцах идентификаторов. Как я уже сказал, ограничений не создается. Но они могут быть легко написаны сценарием в исходной БД и применены к целевой БД после перемещения всех данных.

leoinfo 23.10.2012 18:43

Вторая версия (INSERT INTO...) у меня работала в Oracle.

vapcguy 19.07.2016 16:48

Работает ли это, если две базы данных находятся на совершенно разных серверах с разными строками подключения? Если нет, то как вы с этим справитесь?

Alexander Ryan Baggett 25.08.2017 23:07
  1. Напишите сценарий create table в студии управления, запустите этот сценарий в панели, чтобы создать таблицу. (Щелкните правой кнопкой мыши таблицу в проводнике объектов, таблицу сценариев как, создать в ...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

Мне нравится такой подход. Выбор * не будет работать, если есть столбец идентификаторов, вам нужно явно указать имена столбцов. В этом случае вам также понадобится SET IDENTITY_INSERT TblName ON.

JeremyWeir 06.06.2012 00:36

Задача «Импорт данных» в SQL Server Management Studio (щелкните правой кнопкой мыши имя БД, затем задачи) большую часть этого сделает за вас. Запустите его из базы данных, в которую вы хотите скопировать данные.

Если таблицы не существуют, он создаст их для вас, но вам, вероятно, придется воссоздать какие-либо индексы и тому подобное. Если таблицы действительно существуют, он будет добавлять новые данные по умолчанию, но вы можете настроить это (отредактировать сопоставления), чтобы удалить все существующие данные.

Я использую это все время, и он работает довольно хорошо.

я не могу найти эту опцию. здесь есть что-то конкретное для версии?

Nerrve 20.04.2012 15:24

В общем, нельзя сказать, что это лучший ответ. Например, невозможно вызвать автоматизацию из сценария. Кстати, автор специально просил "..SQL statement ..". Но, конечно, отличный ответ, но не лучший;).

grizzly 05.11.2012 13:35

Автор попросил переместить «(данные и все)»; поэтому я надеялся, что этот ответ сделал это. Он создает таблицу, но не создает никаких ключей или индексов; так что не так много улучшений по сравнению с ответом SQL.

unubar 07.01.2014 02:02

Можно ли указать условие WHERE с помощью задачи «Импорт данных»? Я не мог найти способ сделать это.

crush 27.01.2014 22:45

У меня не было возможности использовать SQL Server Management Studio. Мне пришлось запустить отдельное приложение под названием «Мастер импорта / экспорта SQL Server», которое позволило мне создать пакет и определить источник и место назначения.

Justin Skiles 09.03.2015 06:39

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

GregB 20.04.2015 05:27

да, это правильный способ, как уже упоминалось, здесь тоже, но ссылки identity и foreign key удаляются в целевой базе данных, какое-либо решение?

Shaiju T 16.11.2015 21:35

Для меня это лучший ответ, поскольку оператору SQL без нужды не хватило дискового пространства (что должно быть довольно скучной реализацией SQL Server). Это решение использует достаточно места на диске только для создания новой таблицы, не более того.

karfus 14.02.2016 04:04

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

Irawan Soetomo 09.08.2016 12:15

Как это получило 508 голосов, а ответ Райана «11 окт. 2011 в 23:41» получил только 13 голосов?!? Ryan - это только ответ, который отвечает на вопрос o.p. полностью. Потому что он обрабатывает эти сценарии (которые, кстати, OP НЕ исключил из своего q.): A) Идентичность (общий очень), b) Ограничения, c) Триггеры, d) Индексы, e) Разрешения, d) копирование схемы И Данные (Подсказка: часть «и все» в операторе «(данные и все)» также подразумевает схему.) И е) генерирует «оператор SQL», который оператор уточнил, что, даже если он не имел в виду буквально, лучше иметь, чем нет.

Tom 15.06.2017 00:50

Примечание. Ответ Райана «11 октября 2011 г., 23:41» применим только в том случае, если количество строк не является «чрезмерным» (например, таблицы поиска / малых транзакций) и нет «больших» значений столбца. Для них я бы использовал ответ Райана только для создания сценария для создания таблицы (включая атрибуты столбца и суб-объекты), а потом использовал бы ответ Дэвида Б. «Вставить в выбор». Для отдельных таблиц (вместо Ryan A) вы также можете использовать SSMS, обозреватель объектов, таблицу правой кнопкой мыши, таблицу сценариев как, CREATE To, но вы должны сначала убедиться, что инструменты, параметры, обозреватель объектов SQL Server, параметры сценариев установить по желанию.

Tom 16.06.2017 20:42

Вы также можете использовать Мастер создания сценариев SQL Server, чтобы помочь создать сценарий SQL, который может выполнять следующие действия:

  • скопировать схему таблицы
  • любые ограничения (идентичность, значения по умолчанию и т. д.)
  • данные в таблице
  • и многие другие варианты при необходимости

Хороший пример рабочего процесса для SQL Server 2008 с показанными снимками экрана здесь.

См. Мои комментарии выше: «Как это получило 508/171 голосов и ответ Райана« 11 окт. 2011 в 23:41 ». На сегодняшний день получено только 13 голосов?!? Райан - это только ответ, который отвечает на вопрос оператора. он обрабатывает эти сценарии (которые, кстати, OP НЕ исключил из q.): a) Идентичность (общий очень), b) Ограничения, c) Триггеры, d) Индексы, e) Разрешения, d) копирование схемы и данных (Подсказка: часть «и все» в операторе «(данные и все)» также подразумевает схему.) И е) генерирует «оператор SQL», который указан оператором, который, даже если он не имел в виду, буквально это лучше иметь, чем не иметь ».

Tom 15.06.2017 00:54

Примечание. Этот ответ применим только в том случае, если количество строк не является «чрезмерным» (например, таблицы поиска / малых транзакций) и нет «больших» значений столбца. Для них я бы использовал ответ Райана только для создания сценария для создания таблицы (включая атрибуты столбца и суб-объекты), а затем использовал бы ответ Дэвида Б. «Вставить в выбор». Для отдельных таблиц (вместо Ryan A) вы также можете использовать SSMS, обозреватель объектов, таблицу правой кнопкой мыши, таблицу сценариев как, CREATE To, но вы должны сначала убедиться, что инструменты, параметры, обозреватель объектов SQL Server, параметры сценариев установить по желанию.

Tom 16.06.2017 20:45

Вы можете пойти по этому пути: (общий пример)

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>

Имя сервера указывать необязательно, если обе БД находятся на одном сервере.

Если это только одна таблица, все, что вам нужно сделать, это

  • Определение таблицы скриптов
  • Создать новую таблицу в другой базе данных
  • Обновите правила, индексы, разрешения и т. д.
  • Импортировать данные (несколько вставок в примеры уже показаны выше)

Одна вещь, которую вы должны принять во внимание, - это другие обновления, такие как перенос других объектов в будущем. Обратите внимание, что исходная и конечная таблицы имеют разные имена. Это означает, что вам также придется вносить изменения в зависимые объекты, такие как представления, хранимые процедуры и другие.

К одному или нескольким объектам можно перейти вручную без каких-либо проблем. Однако, когда обновлений больше, чем несколько, сторонние инструменты сравнения очень кстати. Прямо сейчас я использую ApexSQL Diff для переноса схемы, но вы не ошибетесь с любым другим инструментом.

Копировать данные

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details

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

вставить в Destination_Existing_Tbl выберите col1, col2 FROM Source_Tbl

Другие вопросы по теме