2011-12-19 46 views
23

Say table1table2 đã tồn tại, là có bất kỳ sự khác biệt giữa các truy vấn nàySQL Server 'select * vào' so 'chèn vào ..select *

query1: -

select * into table1 from table2 where 1=1 

query2: -

insert into table1 select * from table2 
+5

thể trùng lặp của [INSERT INTO vs SELECT INTO] (http://stackoverflow.com/questions/6947983/insert-into-vs-select -into) và một số người khác – gbn

Trả lời

41

select * into table1 from table2 where 1=1 tạo bảng1 và chèn các giá trị của bảng 2 vào chúng. Vì vậy, nếu bảng đã được tạo ra tuyên bố đó sẽ đưa ra một lỗi.

Chỉ insert into table1 select * from table2 chèn giá trị của bảng 2 vào bảng 1.

+2

Tôi đã không nhận thức được lỗi sẽ được tạo ra bởi truy vấn-1 nếu bảng tồn tại. Cảm ơn nhiều ! –

7

Đầu tiên (SELECT INTO) sẽ tạo và điền bảng mới thứ hai (INSERT... SELECT) chèn vào bảng hiện có.

Trong phiên bản SQL Server trước năm 2008, phiên bản đầu tiên có thể được ghi nhật ký tối thiểu và phiên bản thứ hai không phải là this is no longer true.

3

Trong query2, bảng table1phải tồn tại trước khi chạy lệnh

Trong query1, table1 sẽ được tạo ra hoặc một lỗi sẽ được ném ra nếu nó đã tồn tại

4
select * into table1 from table2 where 1=1 

Các truy vấn trên yêu cầu rằng bảng KHÔNG tồn tại. Bạn không cần phải chỉ định các cột vì tất cả các cột được tạo ra khi chúng được lấy ra từ bảng nguồn.

insert into table1 select * from table2 

Đối với truy vấn trên, bạn cần bảng EXISTING1. Các cột trong cả hai bảng cũng phải theo đúng thứ tự, nếu không bạn cần cung cấp danh sách cột cho cả hai bảng.

1
INSERT INTO TABLE_A SELECT * FROM TABLE_B 

Câu thường được sử dụng, được sử dụng để chèn các giá trị của bảng vào bảng khác. Các cột được chọn cũng có thể được chèn bằng cách sử dụng này.

SELECT * INTO TABLE_A FROM TABLE_B 

sẽ tạo ra một TABLE_A mới điền bằng giá trị của table_b

Các vấn đề liên quan