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


SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >
Конечно! Просто полностью уточните базу данных. [имя сервера]. [схема]. [таблица]. Например SELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Это создает новую таблицу, чего не требует OP.
Пока нет столбцов идентификации, вы можете просто
INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]
Будьте осторожны с этим синтаксисом, так как он не будет работать, если в Table2 есть столбец идентификаторов, и он сломается в будущем, если Table1 когда-либо изменится без синхронизации Table2 (сжечь меня раньше). Это решение может быть идеальным для вашего случая, просто помните об этих соображениях.
Вы можете использовать SET IDENTITY_INSERT < table > ON (и SET IDENTITY_INSERT < table > OFF), чтобы временно отключить столбец идентификаторов в таблице, в которую вы пытаетесь вставить. У меня сработало, пытаясь восстановить несколько недостающих записей в середине набора данных.
что, если первичный ключ в таблице 1 существует в таблице 2 как внешний ключ? У меня то же самое, и я не знаю, что делать ... в table2 id внешний ключ AS "Technology_idTechnology", а в таблице 1 он указан как "idTechnology". Я хочу скопировать все записи из table1 в table2, когда idTechnology совпадает в обеих таблицах ..
Альтернативный синтаксис:
INSERT tbl (Col1, Col2, ..., ColN)
SELECT Col1, Col2, ..., ColN
FROM Tbl2
WHERE ...
Запрос на выбор может (конечно) включать выражения, операторы case, константы / литералы и т. д.
Это здорово, когда таблицы немного отличаются. У меня есть несколько дополнительных столбцов во второй таблице, и принятый ответ не работает с MSSQL, поскольку они должны быть идентичными.
INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ...
работает в SQL Server
Это работает, только когда DestTable не существует. Вы получите сообщение об ошибке, если перед этим запросом будет создана таблица DestTable.
На самом деле это не удается, если целевая таблица не существует. Это может вызвать ошибки, если существующая таблица DestTable не пуста.
Ответ Джарретта создает новую таблицу.
Ответ Скотта вставляется в существующую таблицу с той же структурой.
Вы также можете вставить в таблицу с другой структурой:
INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]
@ScottStonehouse: если вы соберете все остальные ответы в этот ответ, как вы это сделали, но с кодом (сделав его всеобъемлющим), вы определенно станете лучшим ответом.
Есть ли способ сделать это, если эти две таблицы находятся в разных базах данных на sql-сервере.