Microsoft SQL Server
Перемещение и копирование данных вокруг таблиц
Поиск…
Копирование данных из одной таблицы в другую
Этот код выбирает данные из таблицы и отображает их в инструменте запроса (обычно SSMS)
SELECT Column1, Column2, Column3 FROM MySourceTable;
Этот код вставляет эти данные в таблицу:
INSERT INTO MyTargetTable (Column1, Column2, Column3)
SELECT Column1, Column2, Column3 FROM MySourceTable;
Копирование данных в таблицу, создание этой таблицы на лету
Этот код выбирает данные из таблицы:
SELECT Column1, Column2, Column3 FROM MySourceTable;
Этот код создает новую таблицу MyNewTable
и помещает в нее эти данные
SELECT Column1, Column2, Column3
INTO MyNewTable
FROM MySourceTable;
Перемещение данных в таблицу (при использовании метода уникальных ключей)
Чтобы перенести данные, вы сначала вставляете их в цель, а затем удаляете все, что вы вставили из исходной таблицы. Это не нормальная операция SQL, но она может быть просветляющей
Что вы вставляли? Обычно в базах данных необходимо иметь один или несколько столбцов, которые можно использовать для однозначной идентификации строк, поэтому мы будем предполагать это и использовать его.
Этот оператор выбирает некоторые строки
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
Сначала мы вставляем их в нашу целевую таблицу:
INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
Теперь, предполагая, что записи в обеих таблицах уникальны в Key1
, Key2
, мы можем использовать это для поиска и удаления данных из исходной таблицы
DELETE MyTable
WHERE EXISTS (
SELECT * FROM TargetTable
WHERE TargetTable.Key1 = SourceTable.Key1
AND TargetTable.Key2 = SourceTable.Key2
);
Это будет работать только в том Key1
, если Key1
, Key2
уникальны в обеих таблицах
Наконец, мы не хотим, чтобы работа была выполнена наполовину. Если мы завершим это в транзакции, то либо все данные будут перемещены, либо ничего не произойдет. Это гарантирует, что мы не вставляем данные, а затем не можем удалить данные из источника.
BEGIN TRAN;
INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
DELETE MyTable
WHERE EXISTS (
SELECT * FROM TargetTable
WHERE TargetTable.Key1 = SourceTable.Key1
AND TargetTable.Key2 = SourceTable.Key2
);
COMMIT TRAN;