02/10/2018, 00:36

[SQLSERVER] Hướng dẫn sử dụng BCP để import và export dữ liệu hàng loạt trong SQL

Bài viết hôm nay, mình xin giới thiệu với các bạn về công cụ BCP trong sqlserver . Dùng để import và export dữ liệu hàng loạt trong sqlserver. BCP là 1 tiện ích để thực hiện việc sao chép dữ liệu hàng loạt được tối ưu hóa để chuyên trị cho các dữ ...

Bài viết hôm nay, mình xin giới thiệu với các bạn về công cụ BCP trong sqlserver. Dùng để import và export dữ liệu hàng loạt trong sqlserver.

BCP là 1 tiện ích để thực hiện việc sao chép dữ liệu hàng loạt được tối ưu hóa để chuyên trị cho các dữ liệu có qui mô lớn. BCP có thể:

  • Sao chép dữ liệu từ SQL Server ra dữ liệu đích đến có định dạng do người dùng tùy biến (như dạng văn bản phân cách bằng tab, hay bằng dấu phẩy, dạng file excel,...)
  • Sao chép ngược lại dữ liệu từ các nguồn bên ngoài vào lại trong SQL Server

Cú pháp BCP trong SQL SERVER:

bcp [database_name.] schema.{table_name | view_name | "query"}  
{in data_file | out data_file | queryout data_file | format nul}

Trong đó các có các tham số quan trọng sau đây

  • [database_name.] schema.{table_name | view_name | "query"} để trỏ tới bảng, view hoặc câu truy vấn lấy dữ liệu nguồn trong tình huống sử dụng BCP để xuất dữ liệu ra (out) hoặc chỉ định nơi đổ dữ liệu vào trong tình huống sử dụng BCP để nạp dữ liệu vào (in)
  • Từ khóa IN hoặc OUT để quyết định chiều nhập hay xuất dữ liệu
  • Đường dẫn tuyệt đối tới file bên ngoài chứa dữ liệu mà BCP sẽ kết xuất ra hoặc file dữ liệu chứa dữ liệu cần lấy để nạp vào SQL Server,

Xét ví dụ cụ thể sau:

bcp AdventureWorks2012.HumanResources.Employee out C:Employee.txt -t -T

Câu lệnh này sẽ yêu cầu SQL Server thực hiện việc lấy toàn bộ dữ liệu trong bảng Employee của schema HumanResouces thuộc CSDL AdventureWorks2012 ra chứa vào trong file văn bản có tên Employee.txt đặt ở thư mục gốc ổ đĩa C của hệ thống.

tham số -t mang ý nghĩa là các ô dữ liệu trong bảng sẽ được phân cách với nhau bằng tab (mặc định) trong file văn bản kết xuất ra. Nếu muốn sử dụng dấy phẩy để phân tách các thành phần dữ liệu chúng ta thay tham số "-t" nêu trên bằng tham số "-t,"

tham số -T mang ý nghĩa câu lệnh BCP này khi chạy sẽ thiết lập 1 kết nối tin cậy (trusted connection) tới server sử dụng hình thức xác thực dựa trên thông tin xác thực của hệ điều hành (Windows Authentication). Nếu muốn xác thực bằng hình thức dùng SQL Server Authentication thì cần thay tham số -T bằng cặp tham số: 

  • -U đi kèm theo username dùng để đăng nhập SQL Server
  • và tham số -P dùng để chỉ định password xác thực người dùng tương ứng

Ngoài ra nếu chúng ta đang thực hiện câu lệnh này trên máy Client (không phải máy Server) thì cần chỉ định rõ tên Server sau tham số -S

Đặc biệt, đối các với tình huống có sử dụng Unicode chúng ta cần chỉ định thêm 1 tham số quan trọng là -w để hệ thống thực hiện thao tác sao chép dữ liệu theo định dạng hỗ trợ unicode từ hoặc vào các trường có kiểu dữ liệu như nchar, nvarchar,...

Hệ thống sẽ tự động hỏi, nếu chúng ta chỉ định thiếu tham số như hỏi nhập password nếu chúng ta truyền có -U mà không có -P, hay hỏi sử dụng phân cách là gì nếu không có tham số -t.

Nếu thực hiện trên dữ liệu cở lớn (vài chục ngàn record) chúng ta sẽ dễ dàng đánh giá được hiệu suất tuyệt vời của ứng dụng này bằng các thông tin thống kê hiển thị ngay trên màn hình kết quả như tổng thời gian thực hiện, số lượng dòng chép được trung bình trong 1 đơn vị thời gian,...

Việc nạp dữ liệu từ các file bên ngoài có định dạng cho trước vào trở lại bên trong SQL Server cũng thực hiện hoàn toàn tương tự. Các bạn chỉ cần thay từ khóa OUT bằng từ khóa IN là có thể tận dụng khả năng cực kỳ hữu dụng này của BCP.

HAVE FUN :)

Tags:
0