Tôi có một cơ sở dữ liệu gọi là foo và cơ sở dữ liệu gọi là thanh. Tôi có một bảng trong foo gọi là tblFoobar mà tôi muốn di chuyển (dữ liệu và tất cả) sang thanh cơ sở dữ liệu từ cơ sở dữ liệu foo. Câu lệnh SQL để làm điều này là gì?
Tôi có một cơ sở dữ liệu gọi là foo và cơ sở dữ liệu gọi là thanh. Tôi có một bảng trong foo gọi là tblFoobar mà tôi muốn di chuyển (dữ liệu và tất cả) sang thanh cơ sở dữ liệu từ cơ sở dữ liệu foo. Câu lệnh SQL để làm điều này là gì?
Câu trả lời:
Trên máy chủ SQL? 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ư quyền và chỉ mục), bạn sẽ phải làm một cái gì đó khác.
Tác vụ "Nhập dữ liệu" của SQL Server Management Studio (nhấp chuột phải vào tên DB, sau đó các tác vụ) sẽ thực hiện hầu hết việc 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ó lẽ 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ẽ nối thêm dữ liệu mới theo mặc định nhưng bạn có thể điều chỉnh (chỉnh sửa ánh xạ) để nó sẽ xóa tất cả dữ liệu hiện có.
Tôi sử dụng tất cả thời gian và nó hoạt động khá tốt.
WHERE
điều kiện bằng cách sử dụng tác vụ Nhập dữ liệu? Tôi đã không thể tìm ra cách để làm như vậy.
Điều này sẽ làm việc:
SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable
Nó sẽ không sao chép các chòm sao, mặc định hoặc chỉ mục. Bảng được tạo sẽ không có một chỉ mục cụm.
Ngoài ra, bạn có thể:
INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable
Nếu bảng đích của bạn tồn tại và trống.
INSERT INTO...
) làm việc cho tôi trong Oracle.
Nếu chỉ có một bảng thì tất cả những gì bạn cần làm là
Một điều bạn sẽ phải xem xét là các bản cập nhật khác như di chuyển các đối tượng khác trong tương lai. Lưu ý rằng 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 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à các đối tượng khác.
Whit một hoặc một số đối tượng bạn có thể đi bằng tay với bất kỳ vấn đề. Tuy nhiên, khi có nhiều hơn 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. Ngay bây giờ tôi đang sử dụng ApexQuery Diff để di chuyển lược đồ nhưng bạn không thể sai với bất kỳ công cụ nào khác ngoài đó.
Tập lệnh create table
trong studio quản lý, chạy tập lệnh đó trong thanh để tạo bảng. (Bảng nhấp chuột phải trong trình thám hiểm đối tượng, bảng kịch bản dưới dạng, tạo thành ...)
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
SET IDENTITY_INSERT TblName ON
trong trường hợp đó.
Bạn cũng có thể sử dụng Trình hướng dẫn tạo tập lệnh SQL Server để giúp hướng dẫn việc tạo tập lệnh SQL có thể thực hiện như sau:
Ví dụ về quy trình làm việc tốt cho SQL Server 2008 với ảnh chụp màn hình được hiển thị ở đây .
Bạn có thể đi theo cách này: (một ví dụ chung)
insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
Ngoài ra nếu bạn cũng cần tạo các tên cột để đặt trong mệnh đề chèn, hãy 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 trong bảng của bạn 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ớ tập lệnh để sao chép các hàng sẽ hoạt động nếu cơ sở dữ liệu thuộc cùng một vị trí.
Bạn có thể thử cái 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 nằm trong cùng một máy chủ.
Sao chép dữ liệu
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details