Cách sao chép một hàng từ bảng SQL Server này sang bảng khác


91

Tôi có hai bảng giống nhau và cần sao chép các hàng từ bảng này sang bảng khác. Cách tốt nhất để làm điều đó là gì? (Tôi chỉ cần sao chép theo chương trình một vài hàng, tôi không cần sử dụng tiện ích sao chép hàng loạt).

Câu trả lời:


120

Miễn là không có cột nhận dạng, bạn có thể

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]

23
Hãy cẩn thận với cú pháp này vì nó sẽ không hoạt động nếu Table2 có cột nhận dạng và nó sẽ bị hỏng trong tương lai nếu Table1 luôn thay đổi mà Table2 không thay đổi đồng bộ (tôi đã ghi trước đây). Giải pháp này có thể hoàn hảo cho trường hợp của bạn, chỉ cần lưu ý những cân nhắc sau.
Michael Haren,

11
Bạn có thể sử dụng SET IDENTITY_INSERT < table > ON(và SET IDENTITY_INSERT < table > OFF) để tạm thời vô hiệu hóa cột nhận dạng trên bảng mà bạn đang cố gắng chèn vào. Đã làm việc cho tôi khi cố gắng khôi phục một vài bản ghi bị thiếu ở giữa tập dữ liệu.
nickb 14/12/11

1
điều gì sẽ xảy ra nếu khóa chính trong table1 tồn tại trong table2 dưới dạng khóa ngoại? Tôi có điều tương tự và tôi không biết phải làm gì .. trong id table2 có khóa ngoại AS "Technology_idTechnology" và trong bảng 1, nó ở đó là "idTechnology". Tôi muốn sao chép tất cả các mục từ table1 sang table2, khi idTechnology phù hợp trong cả hai bảng ..
ZelelB

71

Cú pháp thay thế:

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

Truy vấn select có thể (tất nhiên) bao gồm các biểu thức, câu lệnh trường hợp, hằng số / chữ, v.v.


2
Điều này thật tuyệt khi các bảng khác nhau một chút. Tôi có thêm một vài cột trong bảng thứ hai và câu trả lời được chấp nhận không hoạt động với MSSQL vì chúng cần phải giống nhau.
Tony M

39

Câu trả lời của Jarrett tạo ra một bảng mới.

Câu trả lời của Scott chèn vào một bảng hiện có có cùng cấu trúc.

Bạn cũng có thể chèn vào một bảng có cấu trúc khác:

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

6
@ScottStonehouse: nếu bạn thu thập tất cả các câu trả lời khác vào câu trả lời này giống như bạn đã làm nhưng với mã (làm cho nó toàn diện), bạn chắc chắn sẽ trở thành câu trả lời tốt nhất.
Michael Haren,

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

hoạt động trong SQL Server


2
Điều này chỉ hoạt động khi DestTable không tồn tại. Bạn sẽ gặp lỗi nếu DestTable được tạo trước truy vấn này.
Một nhà phát triển web

2
Trên thực tế, nó không thành công nếu bảng đích không tồn tại. Nó có thể gây ra lỗi nếu Bảng hủy hiện tại không trống.
Kaniu

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

1
Có cách nào để làm điều này không Nếu hai bảng này nằm trong cơ sở dữ liệu khác nhau trong sql-server.
Naresh

9
Chắc chắn rồi! Chỉ cần đủ điều kiện cơ sở dữ liệu. [tên máy chủ]. [lược đồ]. [bảng]. Ví dụSELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Jarrett Meyer

4
Điều này tạo ra một bảng mới, đây không phải là những gì OP đang yêu cầu.
Conrad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.