2008-10-09 70 views

Trả lời

187

Trên SQL Server? và trên cùng một máy chủ cơ sở dữ liệu? Sử dụng ba phần đặt tên.

INSERT INTO bar..tblFoobar(*fieldlist*) 
SELECT *fieldlist* FROM foo..tblFoobar 

Điều này chỉ di chuyển dữ liệu. Nếu bạn muốn di chuyển định nghĩa bảng (và các thuộc tính khác như các quyền và các chỉ mục), bạn sẽ phải làm điều gì đó khác.

+0

Bạn cũng sẽ phải thiết lập riêng rẽ cho phép bảng, tôi tin. –

+0

Vâng, và lập chỉ mục ... vv –

+1

Nếu bạn cần làm sắc chèn quá, các Import Wizard dữ liệu có một lựa chọn cho ^^ rằng - đề cập đến những câu trả lời khác –

90

này nên làm việc:

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

Nó sẽ không constaints sao chép, giá trị mặc định hoặc chỉ số. Bảng được tạo sẽ không có chỉ mục được nhóm.

Hoặc bạn có thể:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable 

Nếu bảng điểm đến của bạn tồn tại và trống.

+0

Có vấn đề gì nếu bạn sao chép cấu trúc bảng cơ bản (trường và dữ liệu) và sau đó áp dụng tập lệnh * vá * để tạo quyền, chỉ mục, ràng buộc và thuộc tính mở rộng? – leoinfo

+3

Điều này sẽ không chèn giá trị cho cột nhận dạng trong SQL Server 2008. Chỉ được phép khi bạn sử dụng danh sách cột và IDENTITY_INSERT là BẬT cho bảng đích. –

+0

@Lucas - Bạn đang "nửa" ngay :). Tuy nhiên, câu lệnh SQL đầu tiên sao chép TẤT CẢ dữ liệu, bao gồm các giá trị trong các cột nhận dạng. Như tôi đã nói, các ràng buộc không được tạo ra. Nhưng chúng có thể dễ dàng được viết trên DB nguồn và áp dụng cho DB đích khi tất cả dữ liệu được di chuyển. – leoinfo

22
  1. Viết create table trong phòng quản lý, chạy tập lệnh đó trong thanh để tạo bảng. (Nhấp chuột phải bảng trong thám hiểm đối tượng, bảng kịch bản như, sáng tạo để ...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

+1

Tôi thích phương pháp này. Chọn * sẽ không hoạt động nếu có cột danh tính, bạn cần phải liệt kê rõ ràng các tên cột. Bạn cũng sẽ cần phải thực hiện 'SET IDENTITY_INSERT TblName ON' trong trường hợp đó. – JeremyWeir

520

SQL Server Management Studio "Import Data" nhiệm vụ (nhấn chuột phải vào tên DB, sau đó nhiệm vụ) sẽ làm hầu hết điều này cho bạn. Chạy nó từ cơ sở dữ liệu bạn muốn sao chép dữ liệu vào.

Nếu các bảng không tồn tại, nó sẽ tạo chúng cho bạn, nhưng có thể bạn sẽ phải tạo lại bất kỳ chỉ mục nào và như vậy. Nếu các bảng tồn tại, nó sẽ chắp thêm dữ liệu mới theo mặc định nhưng bạn có thể điều chỉnh (sửa ánh xạ) để nó xóa tất cả dữ liệu hiện có.

Tôi sử dụng tất cả thời gian và hoạt động khá tốt.

+1

tôi dường như không thể tìm thấy tùy chọn này. có một phiên bản cụ thể ở đây không? – Nerrve

+2

có vẻ như chỉ có sẵn trong ấn bản năm 2008 – Nerrve

+32

Bạn thực sự không thể nói đó là câu trả lời hay hơn. Nó không thể sử dụng để tự động hóa được gọi từ bên trong một kịch bản chẳng hạn. BTW tác giả yêu cầu cụ thể cho một câu lệnh "..SQL ..". Nhưng tất nhiên đó là một câu trả lời tuyệt vời, nhưng không phải là câu trả lời hay hơn;). – grizzly

15

Bạn cũng có thể sử dụng Generate SQL Server Scripts Wizard để giúp hướng dẫn việc tạo ra các kịch bản SQL rằng có thể làm như sau:

  • sao chép các schema bảng
  • bất kỳ hạn chế (bản sắc, giá trị mặc định, vv)
  • dữ liệu trong bảng
  • và nhiều tùy chọn khác nếu cần

Quy trình làm việc mẫu tốt cho SQL Server 2008 với ảnh chụp màn hình hiển thị here.

+0

Xem nhận xét của tôi ở trên: "Làm thế nào điều này nhận được 508/171 phiếu bầu và Ryan" 11 tháng 10 '11 lúc 23:41 "Câu trả lời chỉ nhận được 13 cho đến nay?!? Ryan là câu trả lời * duy nhất * câu trả lời là của q . * hoàn toàn *. * Bởi vì * nó xử lý các kịch bản này (trong đó, btw, OP không loại trừ từ q của anh ta.): a) Identity (* rất * phổ biến), b) Ràng buộc, c) Kích hoạt, d) Chỉ mục, e) Quyền, d) sao chép Lược đồ và dữ liệu (Gợi ý: phần "và tất cả" của "op (dữ liệu và tất cả)" của op cũng ngụ ý lược đồ.) và e) tạo ra "câu lệnh SQL" mà op đã chỉ định thậm chí nếu anh ta không có nghĩa là nó có nghĩa đen thì tốt hơn là không. " – Tom

+0

Lưu ý: Câu trả lời này chỉ thực tế khi # Hàng không phải là "quá mức" (ví dụ: bảng tra cứu/giao dịch nhỏ) và không có giá trị Cột "lớn". Đối với những người, tôi sẽ sử dụng câu trả lời của Ryan chỉ để tạo ra các Script cho bảng (incl. Cột thuộc tính và phụ đối tượng) Sáng tạo, và sau đó sử dụng David B của "Chèn vào Chọn" Trả lời. Đối với các bảng đơn (thay vì A của Ryan), bạn cũng có thể sử dụng SSMS, Object Explorer, Right-Click Table, Script Table như, CREATE To, nhưng bạn phải đảm bảo Tools, Options, SQL Server Object Explorer, Scripting options thiết lập như mong muốn. – Tom

8

Bạn có thể đi với cách này: (một ví dụ tổng quát)

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB) 
Select columnA, columnB from DeveloperDB.dbo.Customers 

Ngoài ra nếu bạn cần phải tạo ra các tên cột cũng như để đặt tại khoản chèn, sử dụng:

select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') 

Sao chép kết quả và dán vào cửa sổ truy vấn để thể hiện tên cột của bảng và thậm chí điều này cũng sẽ loại trừ cột nhận dạng:

select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') and is_identity = 0 

Hãy nhớ rằng tập lệnh sao chép các hàng sẽ làm việc iff cơ sở dữ liệu thuộc về cùng một vị trí.


Bạn có thể dùng thử tính năng này.

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable> 

Tên máy chủ là tùy chọn nếu cả hai DB ở cùng một máy chủ.

44

Nếu đó là một bảng chỉ sau đó tất cả các bạn cần làm là

  • định nghĩa bảng Script
  • Tạo bảng mới trong cơ sở dữ liệu khác
  • Cập nhật các quy định, các chỉ số, quyền và như vậy Nhập dữ liệu
  • (một số chèn vào ví dụ đã được hiển thị ở trên)

Một điều bạn sẽ phải xem xét là oth er cập nhật như di chuyển các đối tượng khác trong tương lai. Lưu ý rằng các bảng nguồn và đích của bạn không có cùng tên. Điều này có nghĩa là bạn cũng sẽ phải thực hiện thay đổi nếu bạn phụ thuộc vào các đối tượng như chế độ xem, quy trình được lưu trữ và khác.

Whit một hoặc một số đối tượng mà bạn có thể đi bằng tay w/o bất kỳ vấn đề. Tuy nhiên, khi có nhiều hơn chỉ là một vài cập nhật, các công cụ so sánh của bên thứ 3 trở nên rất tiện dụng. Hiện tại, tôi đang sử dụng ApexSQL Diff để di chuyển giản đồ nhưng bạn không thể đi sai với bất kỳ công cụ nào khác ngoài đó.

0

Copy Data

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details 
1

Nếu có bảng hiện có và chúng tôi muốn sao chép chỉ dữ liệu, chúng ta có thể thử truy vấn này.

chèn vào Destination_Existing_Tbl chọn col1, col2 TỪ Source_Tbl

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