Hỏi Đáp SQL------------ Không có câu hỏi nào là sơ đẳng --------

Sử dụng SELECT INTO trong việc copy dữ liệu

Có nhiều cách thức dùng để copy hay di chuyển dữ liệu từ nơi này sang nơi khác, tùy yêu cầu ta chọn cách thức sử dụng cho thích hợp. Với những yêu cầu phức tạp, nhiều điều kiện đi kèm, Integration Service là là sự lựa chọn số 1. Nhưng với những yêu cầu đơn giản, bạn có thể sử dụng các phương pháp giản dị khác. Trong bài viết này tôi chỉ đề cập đến SELECT INTO, tôi sẽ trình bày các phương pháp khác vào các bài viết sau.



Điểm nổi bật nhất trong việc sử dụng SELECT INTO là câu lệnh đơn giản, dễ hiểu. Nếu bạn muốn copy dữ liệu từ bảng A sang 1 bảng mới là AA, câu lệnh đơn giản như sau:

select * into bangAA from bangA;

Khác với cách nhập dữ liệu thông thường, bạn có thể sử dụng cách nhập dữ liệu hàng loạt cho SELECT INTO. Để làm điều này, bạn chỉ cần đổi Recovery Model của cơ sở dữ liệu của bạn sang Simple hay Bulk-logged. Lúc đó SELECT INTO sẽ nhập dữ liệu rất nhanh.

SELECT INTO còn được sử dụng cho việc copy kết quả của 1 câu truy vấn. Ví dụ bạn muốn copy dữ liệu từ 1 câu truy vấn bao gồm bảng A và B, tạo thành 1 bảng mới là AA, câu lệnh như sau:

select * into bangAA from 
(
select ba.a, ba.c, bb.b,bb.v from bangB bb join bangA ba on ba.b=bb.b
)temp

Ở ví dụ này, tôi đã thực hiện 1 lệnh truy xuất lấy dữ liệu từ 2 bảng A và B, sau đó bỏ dữ liệu này vào 1 bảng mới là AA. 

Bạn cần lưu tâm là trường của bảng mới (AA) chính là trường của bảng mà tôi lấy ra từ câu truy xuất. Ví dụ bảng A và B đều có trường b, nhưng trong câu lệnh truy xuất tôi chỉ lấy trường b của bảng B, trường này là bigint. Kết của là bảng mới AA sẽ có trường b là bigint.


Ngoài ra bạn cần lưu tâm là SELECT INTO copy dữ liệu, trường và các thông số của trường (như datatype, identity, hay quy định null ....) nhưng nó không copy những đối tượng đi kèm với bảng như CONSTRAINTS, INDEXES, TRIGGERS. Nếu bảng mới cần những đối tượng đi kèm kể trên, bạn phải tự tạo sau khi đã chạy SELECT INTO.

Không có nhận xét nào:

Đăng nhận xét