Có thể bạn quan tâm: Mẫu Test Case Trong Excel: Hướng Dẫn Chi Tiết Tạo, Sử Dụng Và Tối Ưu Hóa Quy Trình Kiểm Thử Phần Mềm
Mở Đầu
Trong môi trường doanh nghiệp hiện đại, việc xử lý và chia sẻ dữ liệu là một trong những yếu tố then chốt quyết định hiệu suất làm việc và khả năng đưa ra quyết định nhanh chóng. SQL Server, với vai trò là hệ quản trị cơ sở dữ liệu mạnh mẽ, thường được sử dụng để lưu trữ và quản lý khối lượng dữ liệu lớn. Tuy nhiên, hầu hết người dùng cuối (các nhà quản lý, nhân viên kinh doanh, nhân viên kế toán…) lại quen thuộc hơn với Excel – công cụ bảng tính linh hoạt, dễ thao tác và trực quan. Vì vậy, nhu cầu export dữ liệu từ SQL Server sang Excel luôn xuất hiện và ngày càng trở nên quan trọng.
Bài viết này sẽ cung cấp cho bạn một hướng dẫn toàn diện, chi tiết, từ các khái niệm cơ bản, các công cụ và phương pháp phổ biến, đến các bước thực hiện cụ thể và những lưu ý, mẹo tối ưu hoá quá trình export. Nội dung được chia thành các phần chính:
- Tổng quan về nhu cầu export và các định dạng Excel.
- Các công cụ tích hợp sẵn trong SQL Server (SQL Server Management Studio, SQL Server Import and Export Wizard, Integration Services).
- Sử dụng T-SQL và các hàm hỗ trợ export (OPENROWSET, bcp, xp_cmdshell).
- Export bằng PowerShell.
- Export qua các công cụ bên thứ ba (Redgate, Devart, ApexSQL).
- Các phương pháp export tự động (SQL Agent Jobs, SSIS Packages, Azure Data Factory).
- Lưu ý về hiệu suất, bảo mật và định dạng dữ liệu.
- Mẹo tối ưu và các vấn đề thường gặp.
Hy vọng sau khi đọc bài viết này, bạn sẽ nắm vững cách xuất dữ liệu từ SQL Server sang Excel một cách nhanh chóng, an toàn và hiệu quả.
Có thể bạn quan tâm: Cách Hiển Thị Và Quản Lý Page Breaks Trong Excel: Hướng Dẫn Chi Tiết Từ A Đến Z
1. Tại Sao Cần Export Dữ Liệu Từ SQL Server Sang Excel?
1.1. Đáp ứng nhu cầu báo cáo và phân tích
- Báo cáo nhanh: Excel cho phép người dùng tạo báo cáo, biểu đồ, PivotTable trong thời gian ngắn mà không cần viết code.
- Phân tích dữ liệu: Các tính năng như Power Query, Power Pivot giúp người dùng thực hiện phân tích dữ liệu phức tạp, kết hợp dữ liệu từ nhiều nguồn.
1.2. Chia sẻ dữ liệu với người không có truy cập SQL Server
- Đối tác, khách hàng: Thông thường, họ chỉ có Excel, không có quyền truy cập trực tiếp vào cơ sở dữ liệu.
- Nhóm nội bộ: Khi một bộ phận không chịu trách nhiệm quản trị DB, việc cung cấp file Excel là cách tiếp cận nhanh nhất.
1.3. Lưu trữ tạm thời hoặc sao lưu dữ liệu
- Sao lưu: Dữ liệu quan trọng có thể được sao lưu dưới dạng Excel để kiểm tra nhanh.
- Di chuyển dữ liệu: Khi di chuyển giữa các hệ thống, Excel có thể là “điểm trung gian” tiện lợi.
Có thể bạn quan tâm: Shibuya Stream Excel Hotel Tokyu – Trải Nghiệm Đẳng Cấp Tại Trung Tâm Tokyo
2. Các Định Dạng Excel Phổ Biến Khi Export
| Định dạng | Mô tả | Khi nào nên dùng |
|---|---|---|
| .xls | Định dạng Excel 97-2003, giới hạn 65.536 hàng, 256 cột. | Dữ liệu nhỏ, tương thích với phiên bản Excel cũ. |
| .xlsx | Định dạng Office Open XML (Excel 2007+), hỗ trợ tới 1,048,576 hàng và 16,384 cột. | Dữ liệu lớn, tính năng mới như biểu đồ, công thức. |
| .csv | Dữ liệu dạng văn bản, mỗi dòng là một bản ghi, phân cách bằng dấu phẩy (hoặc dấu tab). | Khi cần trao đổi dữ liệu nhanh, không cần định dạng. |
| .xlsb | Excel Binary Workbook, nhanh hơn khi lưu/đọc, hỗ trợ macro. | Khi file lớn và cần tốc độ xử lý cao. |
Trong hầu hết các trường hợp, .xlsx là lựa chọn tối ưu vì khả năng chứa dữ liệu lớn và hỗ trợ đầy đủ tính năng của Excel.
3. Công Cụ Tích Hợp Sẵn Trong SQL Server
3.1. SQL Server Management Studio (SSMS)
3.1.1. Sử Dụng “Export Data” Wizard
- Mở SSMS và kết nối tới instance SQL Server.
- Chuột phải vào database cần export → Tasks → Export Data….
- Chọn nguồn dữ liệu: Đảm bảo “Data source” là SQL Server Native Client và thông tin kết nối đúng.
- Chọn destination: Chọn Microsoft Excel và chỉ định đường dẫn file (.xlsx). Lưu ý: Khi chọn Excel, SSMS sẽ tự động tạo một “sheet” đầu tiên có tên Sheet1$.
- Chọn cách export:
- Copy data from one or more tables or views: Dùng khi muốn export toàn bộ bảng hoặc view.
- Write a query to specify the data to transfer: Dùng khi cần lọc, tính toán trước khi export.
- Thiết lập mapping (nếu cần): Đảm bảo kiểu dữ liệu tương thích; ví dụ,
datetimesẽ được chuyển thành định dạng ngày tháng mà Excel hiểu. - Kiểm tra và chạy: Wizard sẽ hiển thị summary, bạn có thể lưu lại cấu hình dưới dạng SSIS package để tái sử dụng.
- Kiểm tra file Excel: Mở file, xác nhận dữ liệu đã được export đúng.
Ưu điểm:
– Giao diện trực quan, không cần lập trình.
– Hỗ trợ lưu lại dưới dạng SSIS package.
Nhược điểm:
– Không thích hợp cho các export lớn (hơn 100.000 dòng) vì tốc độ chậm và khả năng gặp lỗi timeout.
– Hạn chế trong việc tùy chỉnh định dạng (font, màu, công thức).
3.1.2. Export Data bằng “Generate Scripts”
Nếu muốn xuất cấu trúc của bảng (DDL) dưới dạng script, bạn có thể dùng Tasks → Generate Scripts → chọn “Schema and Data”. Sau khi có script tạo bảng và chèn dữ liệu (INSERT), có thể chạy script trên một máy có Excel và sử dụng VBA để chuyển kết quả ra file. Tuy nhiên, cách này phức tạp và ít thực tiễn.
3.2. SQL Server Integration Services (SSIS)
SSIS là nền tảng ETL mạnh mẽ, cho phép tạo Data Flow Task để chuyển dữ liệu từ SQL Server sang Excel.
3.2.1. Các thành phần chính
| Thành phần | Chức năng |
|---|---|
| OLE DB Source | Đọc dữ liệu từ SQL Server (có thể dùng query). |
| Excel Destination | Ghi dữ liệu vào file Excel (có thể tạo sheet mới). |
| Data Conversion | Chuyển đổi kiểu dữ liệu không tương thích (ví dụ datetime → string). |
| Derived Column | Tạo/biến đổi cột (ví dụ: format ngày tháng). |
3.2.2. Các bước thực hiện (tóm tắt)
- Mở SQL Server Data Tools (SSDT) và tạo một Integration Services Project.
- Thêm Data Flow Task vào Control Flow.
- Trong Data Flow, kéo OLE DB Source, cấu hình connection manager tới SQL Server, và nhập query cần export.
- Thêm Data Conversion (nếu cần) để chuyển các kiểu không hỗ trợ Excel (ví dụ:
uniqueidentifier→string). - Kéo Excel Destination, tạo Excel Connection Manager:
- Đặt đường dẫn file
.xlsx. - Chọn Excel version (2007-2026 cho .xlsx).
- Đánh dấu “First row has column names” nếu muốn.
- Map các cột từ source tới destination.
- Chạy Package để kiểm tra. Nếu mọi thứ ổn, có thể lưu package và lên lịch chạy bằng SQL Server Agent.
Ưu điểm:
– Xử lý dữ liệu lớn, có thể thực hiện các biến đổi phức tạp.
– Hỗ trợ lên lịch, tự động hoá.
Nhược điểm:
– Cần kiến thức về SSIS, Visual Studio.
– Đối với người mới, giao diện có thể hơi phức tạp.
3.3. SQL Server Import and Export Wizard (Standalone)
Wizard này thực chất là một phiên bản rút gọn của SSIS, chạy trực tiếp từ Start → Microsoft SQL Server → Import and Export Data. Các bước tương tự như trong SSMS, nhưng không phụ thuộc vào SSMS.
4. Export Dữ Liệu Bằng T-SQL
4.1. Sử Dụng OPENROWSET và OPENDATASOURCE
OPENROWSET cho phép thực thi một query và đưa kết quả trực tiếp vào một file Excel.
-- Đảm bảo tính năng Ad Hoc Distributed Queries được bật
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; -- Export dữ liệu
SELECT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Export\Report.xlsx;HDR=YES', 'SELECT FROM Sheet1$')
FROM dbo.YourTable;
Lưu ý:
– Cần cài đặt Microsoft Access Database Engine (ACE) trên server.
– Đường dẫn file phải là đường dẫn đầy đủ và server phải có quyền ghi.
– Khi dùng SELECT INTO, SQL Server sẽ tạo một sheet mới và ghi dữ liệu.
4.2. Sử Dụng bcp (Bulk Copy Program)
bcp là công cụ dòng lệnh cho phép xuất dữ liệu sang file text. Khi kết hợp với CSV, sau đó mở bằng Excel, chúng ta có thể có file Excel.
bcp "SELECT Column1, Column2 FROM dbo.YourTable" queryout "C:\Export\Report.csv" -c -t, -T -S SERVERNAME
-c: character type.-t,: delimiter là dấu phẩy.-T: sử dụng Windows authentication.
Sau khi có file CSV, mở trong Excel → Data → From Text/CSV → chọn delimiter và hoàn tất.
4.3. Sử Dụng xp_cmdshell Để Gọi bcp
Nếu muốn thực hiện từ trong T-SQL và không muốn rời console, có thể bật xp_cmdshell và gọi bcp.
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; DECLARE @bcpCommand NVARCHAR(4000);
SET @bcpCommand = N'bcp "SELECT Column1, Column2 FROM dbo.YourTable" queryout "C:\Export\Report.csv" -c -t, -T -S SERVERNAME';
EXEC xp_cmdshell @bcpCommand;
Cảnh báo: xp_cmdshell có rủi ro bảo mật, chỉ nên bật trên môi trường kiểm thử hoặc có kiểm soát chặt chẽ.
4.4. Export Dùng FOR XML và OPENXML (đối với Excel XML)

Có thể bạn quan tâm: Soạn Thảo Excel Trên Iphone: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
Excel 2003 hỗ trợ XML Spreadsheet. Bạn có thể tạo file XML từ query và lưu lại, Excel sẽ mở được.
SELECT (SELECT Column1 AS "Column1", Column2 AS "Column2" FROM dbo.YourTable FOR XML PATH('Row'), ROOT('Table')) AS XmlData
FOR XML PATH(''), TYPE;
Sau khi xuất ra file .xml, đổi đuôi thành .xls và mở bằng Excel. Phương pháp này ít dùng hiện nay vì định dạng đã lỗi thời.
5. Export Bằng PowerShell
PowerShell là công cụ mạnh mẽ, cho phép kết hợp .NET và SQL Server.
5.1. Dùng Invoke-Sqlcmd và Export-Excel (module ImportExcel)
# Cài đặt module ImportExcel nếu chưa có
Install-Module -Name ImportExcel -Scope CurrentUser # Thực thi query
$query = "SELECT Column1, Column2 FROM dbo.YourTable"
$connectionString = "Server=SERVERNAME;Database=YourDB;Integrated Security=SSPI;" $dt = Invoke-Sqlcmd -Query $query -ConnectionString $connectionString # Export sang Excel
$dt | Export-Excel -Path "C:\Export\Report.xlsx" -WorksheetName "Data" -AutoSize
Ưu điểm:
– Định dạng linh hoạt (định dạng ô, màu, biểu đồ) bằng các tham số của Export-Excel.
– Có thể tích hợp vào script tự động (Scheduled Tasks).
5.2. Sử Dụng System.Data.SqlClient và ClosedXML
Add-Type -AssemblyName System.Data
Add-Type -Path "C:\Path\ClosedXML.dll" $connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = "Server=SERVERNAME;Database=YourDB;Integrated Security=SSPI;"
$command = $connection.CreateCommand()
$command.CommandText = "SELECT Column1, Column2 FROM dbo.YourTable"
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter $command
$dt = New-Object System.Data.DataTable
$adapter.Fill($dt) | Out-Null $workbook = New-Object ClosedXML.Excel.XLWorkbook
$worksheet = $workbook.Worksheets.Add($dt, "Data")
$workbook.SaveAs("C:\Export\Report.xlsx")
ClosedXML cung cấp khả năng định dạng mạnh mẽ (định dạng ngày, tiền tệ, màu nền).
6. Các Công Cụ Bên Thứ Ba
| Công cụ | Đặc điểm | Giá |
|---|---|---|
| Redgate SQL Data Compare | So sánh, đồng bộ, export dữ liệu sang CSV/Excel. | Thường có bản trial, sau đó trả phí. |
| Devart dbForge Studio for SQL Server | Giao diện trực quan, export trực tiếp sang Excel, hỗ trợ định dạng. | Bản trả phí, có bản miễn phí hạn chế. |
| ApexSQL Data Diff | Export dữ liệu, tạo script, hỗ trợ backup. | Bản trả phí. |
| SQL Server Export Wizard (Third‑party) | Giao diện đơn giản, hỗ trợ đa định dạng (Excel, PDF). | Miễn phí hoặc trả phí tùy phiên bản. |
Những công cụ này thường cung cấp giao diện kéo‑thả, hỗ trợ định dạng ô, tạo báo cáo nhanh, nhưng cần cân nhắc chi phí và bảo mật.
7. Tự Động Hóa Export – Lên Lịch và Triển Khai
7.1. SQL Server Agent Job
- Tạo Job → Steps → Type: SQL Server Integration Services Package (nếu dùng SSIS) hoặc Operating system (CmdExec) để chạy script PowerShell/bcp.
- Schedule: Đặt lịch chạy hàng ngày, hàng tuần tùy nhu cầu.
- Notify: Cấu hình email thông báo khi job thành công hoặc thất bại.
7.2. SSIS Package Được Lên Lịch
- Khi package được lưu trong MSDB hoặc File System, bạn có thể tạo một SQL Agent Job để gọi
dtexec:
dtexec /DTS "\MSDB\ExportToExcelPackage" /SERVER SERVERNAME /MAXCONNECTIONS 5
7.3. Azure Data Factory (ADF)
Nếu dữ liệu nằm trên Azure SQL Database hoặc SQL Managed Instance, ADF cung cấp Copy Activity:
- Source: Azure SQL Database.
- Sink: Azure Blob Storage → định dạng Excel (được hỗ trợ từ ADF v2). Sau đó, sử dụng Logic Apps hoặc Power Automate để gửi file qua email.
7.4. Power Automate
- Kết nối tới SQL Server (gateway) → Run a query → Create CSV table → Create file (OneDrive/SharePoint) → Convert file (Excel) → Send email.
8. Lưu Ý Về Hiệu Suất và Bảo Mật
8.1. Hiệu suất
- Số lượng dòng: Excel .xlsx giới hạn 1,048,576 hàng. Nếu dữ liệu lớn hơn, hãy chia thành nhiều sheet hoặc dùng CSV.
- Batch size: Khi dùng
bcphoặc SSIS, cấu hình batch size phù hợp (ví dụ 10.000 rows) để giảm memory consumption. - Index và Statistics: Đảm bảo query được tối ưu, tránh full table scan khi không cần.
8.2. Bảo mật
- Quyền ghi file: Đảm bảo tài khoản service (SQL Server Agent, SSIS) có quyền ghi vào thư mục đích.
- Mã hoá dữ liệu: Nếu dữ liệu nhạy cảm, cân nhắc mã hoá file Excel (password) hoặc lưu trên vị trí bảo mật (SharePoint với quyền hạn chế).
- Tắt tính năng nguy hiểm:
xp_cmdshell,Ad Hoc Distributed Queriesnên được tắt sau khi sử dụng.
8.3. Định dạng dữ liệu
| Kiểu SQL | Định dạng Excel đề xuất | Ghi chú |
|---|---|---|
datetime / datetime2 | yyyy-mm-dd hh:mm:ss hoặc định dạng ngày Excel | Sử dụng CONVERT(varchar, column, 120) trong query nếu cần. |
money / decimal | Số thập phân, định dạng tiền tệ | Đặt NumberFormat trong SSIS hoặc PowerShell nếu muốn. |
bit | TRUE/FALSE hoặc 0/1 | Có thể chuyển thành VARCHAR trong query. |
uniqueidentifier | Chuỗi GUID | Chuyển sang NVARCHAR(36). |
9. Mẹo Tối Ưu Và Giải Quyết Các Vấn Đề Thường Gặp
9.1. Giải quyết lỗi “The Microsoft.ACE.OLEDB.12.0 provider is not registered”
- Cài đặt Microsoft Access Database Engine 2026 Redistributable (32‑bit hoặc 64‑bit tùy phiên bản SQL Server).
- Kiểm tra kiến trúc: Nếu SQL Server 64‑bit, cài 64‑bit ACE.
9.2. Lỗi “Cannot find the object” khi export sang Excel trong SSIS
- Đảm bảo sheet name kết thúc bằng ký tự
$(ví dụ:Sheet1$). - Nếu sheet chưa tồn tại, SSIS sẽ tự tạo; nếu có, hãy chọn Table or view trong Excel Destination để ghi đè hoặc append.
9.3. Khi dữ liệu bị cắt ngắn (truncated) trong Excel
- Kiểm tra độ rộng cột và định dạng trong Excel. Đối với các chuỗi dài (>255 ký tự), Excel vẫn chấp nhận, nhưng một số công cụ (như
OPENROWSET) có thể cắt. - Sử dụng
NVARCHAR(MAX)trong query và trong SSIS, đặt Data Type làDT_TEXT.
9.4. Tự động đặt tên file dựa trên ngày tháng
Trong PowerShell:
$filename = "Report_$(Get-Date -Format yyyyMMdd).xlsx"
Export-Excel -Path "C:\Export\$filename" -WorksheetName "Data"
Trong SSIS, sử dụng Expression của Excel Connection Manager:
"C:\\Export\\Report_" + (DT_WSTR, 8) (DT_DBDATE) GETDATE() + ".xlsx"
9.5. Export nhiều bảng vào một file Excel (nhiều sheet)
- SSIS: Tạo nhiều Excel Destination, mỗi destination trỏ tới một sheet khác (
Sheet1$,Sheet2$, …). - PowerShell + ImportExcel: Lặp qua danh sách bảng, dùng
Export-Excel -WorksheetName.
$tables = @('Customers','Orders','Products')
foreach ($tbl in $tables){ $query = "SELECT FROM dbo.$tbl" $dt = Invoke-Sqlcmd -Query $query -ConnectionString $cs $dt | Export-Excel -Path $filePath -WorksheetName $tbl -AutoSize -TableName $tbl -Append
}
9.6. Sử dụng sp_send_dbmail để gửi file Excel tự động
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'YourMailProfile', @recipients = 'user@example.com', @subject = 'Báo cáo ngày hôm nay', @body = 'Đính kèm là báo cáo Excel.', @file_attachments = 'C:\Export\Report.xlsx';
Kết hợp với SQL Agent Job để tạo và gửi báo cáo hàng ngày.
10. Tổng Kết
Việc export dữ liệu từ SQL Server sang Excel không còn là một thách thức khó khăn nếu bạn hiểu rõ các công cụ và phương pháp sẵn có. Từ các giải pháp đơn giản như SSMS Export Wizard, đến các phương pháp mạnh mẽ và linh hoạt như SSIS, PowerShell, hay T‑SQL + OPENROWSET, mỗi cách đều có ưu, nhược điểm riêng, phù hợp với các tình huống khác nhau:
- Nhu cầu nhanh, không quá lớn → SSMS Wizard hoặc
bcp+ CSV. - Export phức tạp, cần biến đổi dữ liệu → SSIS hoặc PowerShell + ImportExcel.
- Tự động hoá và lên lịch → SQL Agent Job + SSIS Package hoặc PowerShell script.
- Bảo mật cao → Đảm bảo quyền truy cập, mã hoá file, tắt các tính năng nguy hiểm sau khi sử dụng.
Cuối cùng, quan trọng nhất là đánh giá khối lượng dữ liệu, tần suất export và yêu cầu định dạng để chọn giải pháp tối ưu nhất. Khi áp dụng đúng, bạn sẽ tiết kiệm thời gian, giảm lỗi và cung cấp thông tin nhanh chóng cho người dùng cuối, đồng thời duy trì được tính ổn định và bảo mật cho hệ thống SQL Server.
Chúc bạn thành công trong việc triển khai các quy trình export dữ liệu từ SQL Server sang Excel!

Tiến sĩ Lê Thống Nhất sinh năm 1955 tại Nghệ An, là nhà giáo, nhà báo và doanh nhân trong lĩnh vực giáo dục. Ông từng giảng dạy Toán học tại Trường THPT Chuyên Phan Bội Châu và đảm nhiệm nhiều vai trò trong ngành giáo dục, từ viết sách, biên soạn tài liệu đến sáng lập các dự án hỗ trợ học tập trực tuyến.
Ông là người sáng lập BigSchool – nền tảng giáo dục trực tuyến kết nối giáo viên và học sinh cả nước. Ngoài ra, ông còn nổi tiếng với vai trò tác giả, diễn giả truyền cảm hứng và khách mời trên nhiều chương trình truyền hình, trong đó có “Ai là triệu phú” trên truyền hình VTV.
Trong suốt sự nghiệp, Tiến sĩ Lê Thống Nhất đã nhận nhiều giải thưởng giáo dục và được biết đến như một người luôn đổi mới, ứng dụng công nghệ vào dạy và học, góp phần lan tỏa tri thức và niềm say mê học tập cho thế hệ trẻ.
