Як скопіювати рядок з однієї таблиці SQL Server в іншу


91

У мене дві однакові таблиці, і мені потрібно скопіювати рядки з таблиці в іншу. Який найкращий спосіб це зробити? (Мені потрібно програмно скопіювати лише кілька рядків, мені не потрібно користуватися утилітою масового копіювання).

Відповіді:


120

Поки немає стовпців ідентичності, ви можете просто

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]

23
Будьте обережні з цим синтаксисом, оскільки він не буде працювати, якщо Table2 має стовпець ідентичності, і він зламається в майбутньому, якщо Table1 коли-небудь зміниться, не змінюючи синхронізацію Table2 (спалював мене раніше). Це рішення може бути ідеальним для вашої справи, просто пам’ятайте про ці міркування.
Майкл Харен,

11
Ви можете використовувати SET IDENTITY_INSERT < table > ONSET IDENTITY_INSERT < table > OFF) для тимчасового вимкнення стовпця ідентифікації в таблиці, яку ви намагаєтесь вставити. Працював для мене, намагаючись відновити кілька відсутніх записів у середині набору даних.
nickb

1
а якщо первинний ключ у table1 існує у table2 як зовнішній ключ? У мене те саме, і я не знаю, що робити .. у таблиці2 ідентифікується зовнішній ключ AS "Technology_idTechnology", а в таблиці 1 - це "idTechnology". Я хочу скопіювати всі записи з table1 до table2, коли idTechnology співпадає в обох таблицях ..
ZelelB 24.03.15

71

Альтернативний синтаксис:

INSERT tbl (Col1, Col2, ..., ColN)
  SELECT Col1, Col2, ..., ColN
  FROM Tbl2
  WHERE ...

Запит select може (звичайно) включати вирази, твердження регістру, константи / літерали тощо.


2
Це чудово, коли таблиці дещо відрізняються. У моїй другій таблиці є кілька додаткових стовпців, і прийнята відповідь не працює з MSSQL, оскільки вони повинні бути однаковими.
Тоні М

39

Відповідь Джарретта створює нову таблицю.

Відповідь Скотта вставляється в існуючу таблицю з такою ж структурою.

Ви також можете вставити в таблицю з різною структурою:

INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]

6
@ScottStonehouse: якщо ви зібрали всі інші відповіді на цю відповідь, як і раніше, але з кодом (роблячи його вичерпним), ви точно стали б найкращою відповіддю.
Michael Haren

6
INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ... 

працює в SQL Server


2
Це працює лише тоді, коли DestTable не існує. Ви отримаєте повідомлення про помилку, якщо DestTable буде створено до цього запиту.
Веб-розробник

2
Насправді це не вдається, якщо таблиця призначення не існує. Це може спричинити помилки, якщо існуюча цільова таблиця не порожня.
Kaniu

5
SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >

1
Чи можна це зробити, якщо ці дві таблиці знаходяться в базах даних diff на sql-сервері.
Нареш

9
Звичайно! Просто повністю кваліфікуйте базу даних. [ім'я сервера]. [схема]. [таблиця]. НаприкладSELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Джарретт Мейєр

4
Це створює нову таблицю, яка не є тим, про що вимагає OP.
Конрад
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.