В подобных случаях мы предполагаем, что вы знаете структуру таблицы.Другими словами, вы не спрашиваете «как мне узнать, что представляют собой все эти столбцы, индексы и ограничения».
Во-вторых, мы склонны считать, что все данные в таблице A действительны, поэтому вы ненеобходимо применять ограничения при копировании из A в B.
Ваш «какой-то другой источник» является подстановочным знаком.Я предполагаю, что вы не знаете, содержит ли этот другой источник допустимые данные, и предложили бы:
1) Создать B без ограничений или ограничений
2) Копировать / выполнить массовую вставку из "Другой источник "B
3) Выполните ограничения, выполнив SELECTS для поиска недопустимых строк.Пропустите этот шаг, если вы знаете, что данные действительны.Как только все в порядке, чтобы продолжить:
4) Скопируйте A в B в виде «кусков».Проблема здесь заключается в том, что прямое SELECT ... INTO ... из всех X миллионов строк будет длиться вечно (из-за увеличения ресурсов, необходимых для выполнения одной подразумеваемой транзакции), но строка за строкой также будетпринимать вечно (потому что просто медленно делать по одной строке за раз).Таким образом, вы обрабатываете фрагменты по 1000 или 10000 строк одновременно.
5) Когда все данные скопированы, добавьте значения
6) Добавьте ограничения
7) Отбросьте A
8) Переименуйте B