使用 SQL Server Management Studio (SSMS) 图形化界面
这是最简单、最直观的方法,适合不熟悉命令行的用户。

场景1:导出为数据文件(如 CSV, TXT)
这种方法直接将表数据导出为文本文件,方便被 Excel 或其他程序读取。
- 连接数据库:打开 SSMS 并连接到你的 SQL Server 实例。
- 选择表:在“对象资源管理器”中,找到并展开你要导出数据的数据库,然后展开“表”。
- 启动导出向导:
- 右键点击目标表。
- 选择 “编写脚本为” (Script as) -> “SELECT 到” (SELECT to) -> “新查询编辑器窗口” (New Query Editor Window)。
- 这会生成一个
SELECT * FROM YourTableName的查询,你也可以直接在查询窗口中手动输入这个查询。 - 执行这个查询(按 F5),确保结果集是你想要的。
- 右键点击结果网格的任意位置,选择 “将结果另存为” (Save Results As)。
- 在弹出的对话框中,选择文件类型(通常是 CSV 或 TXT),输入文件名,然后保存。
优点:
- 操作简单,无需编写复杂脚本。
- 可以直接预览数据。
缺点:
- 只能导出当前查询窗口中的结果集,如果数据量很大,可能会受 SSMS 界面限制。
- 导出的文件可能包含列头,也可能不包含,取决于 SSMS 的设置。
场景2:使用“导出数据”向导 (SQL Server 导入和导出向导)
这是一个功能更强大的向导,可以处理更复杂的导出任务,比如数据转换、导出到不同格式(Excel, Access 等)。

- 启动向导:
- 在 SSMS 的“对象资源管理器”中,右键点击你的数据库实例或数据库节点。
- 选择 “任务” (Tasks) -> “导出数据...” (Export Data...)。
- 选择数据源:
- 数据源:确保是
SQL Server Native Client或你正在使用的连接类型。 - 服务器名称:会自动填充。
- 身份验证:选择你的登录方式(Windows 或 SQL Server)。
- 数据库:选择源数据库。
- 点击 “下一步”。
- 数据源:确保是
- 选择目标:
- 目标:选择你想要导出的文件类型。
平面文件目标:用于导出为 CSV 或 TXT 文件(最常用)。Microsoft Excel:导出到 Excel 文件。Microsoft Access:导出到 Access 数据库。ODBC 数据源:导出到其他数据库。
- 点击 “下一步”。
- 目标:选择你想要导出的文件类型。
- 指定表或查询:
- 选择 “编写查询以指定要传输的数据” (Write a query to specify the data to transfer)。
- 点击 “编辑查询...” (Edit Query...) 按钮,输入你的
SELECT语句(SELECT * FROM YourTableName WHERE ...)。 - 点击 “下一步”。
- 列映射和转换:
- 在这一步,你可以查看列的映射关系。
- 如果需要,可以点击“列映射”或“转换”选项卡进行修改,例如更改数据类型、设置目标列名等。
- 对于简单的导出,通常可以跳过。
- 点击 “下一步”。
- 执行包:
- 你可以立即执行导出,也可以将此配置保存为一个 SSIS 包,以便以后重复使用。
- 点击 “下一步”。
- 完成:
- 确认信息无误后,点击 “完成”。
- 向导会显示执行进度和结果。
优点:
- 功能非常强大,支持多种目标格式。
- 可以进行数据筛选和转换。
- 可以保存为可重复使用的包。
缺点:
- 步骤相对较多,需要向导操作。
使用 T-SQL 命令
如果你需要自动化导出过程(例如在脚本或作业中执行),使用 T-SQL 是最佳选择。
场景1:使用 bcp 实用工具
bcp (Bulk Copy Program) 是一个命令行工具,专门用于在 SQL Server 实例和用户格式的文件之间大容量复制数据。这是导出大量数据最高效的方法。

语法:
bcp [数据库名].[架构名].[表名] out [文件路径] -S [服务器名] -U [用户名] -P [密码] -c -t, -T
参数说明:
out:表示数据是导出到文件。-S:SQL Server 服务器名称或地址,如果使用本地信任连接,可以省略。-U:SQL Server 用户名。-P:SQL Server 密码,如果使用 Windows 身份验证(-T),则此参数可省略。-c:使用字符类型数据,这是最常用的选项,适合导出为文本文件。-t,:指定列分隔符,这里用逗号 ,非常适合 CSV 文件,默认是制表符\t。-T:使用信任的连接(Windows 身份验证),如果你使用 SQL Server 身份验证,则需要-U和-P。-w:使用 Unicode 字符类型。
示例:
假设你要将 Sales.Orders 表导出到 C:\Temp\orders.csv 文件,使用 Windows 身份验证和逗号分隔。
- 打开命令提示符 (CMD) 或 PowerShell。
- 执行以下命令:
bcp AdventureWorks2025.Sales.Orders out "C:\Temp\orders.csv" -S localhost -c -t, -T
注意:你需要将
AdventureWorks2025替换为你的数据库名,Sales.Orders替换为你的表名。
优点:
- 性能极高,适合导出海量数据。
- 命令简单,易于集成到自动化脚本中。
缺点:
- 是命令行工具,不直观。
- 处理复杂查询(如
JOIN)不如bcp直接,需要先将结果存入临时表或视图。
场景2:使用 sqlcmd 实用工具
sqlcmd 可以执行 T-SQL 查询并将结果输出到文件,它非常适合导出基于复杂查询的结果。
语法:
sqlcmd -S [服务器名] -U [用户名] -P [密码] -Q "SELECT 语句" -o [文件路径] -w 120 -s ","
参数说明:
-Q:执行查询后退出,查询语句需要用双引号括起来。-o:指定输出文件的路径。-w:设置每行的宽度(字符数)。-s:设置列分隔符。
示例:
将 Sales.Orders 表导出到 C:\Temp\orders_sqlcmd.csv,使用逗号分隔。
sqlcmd -S localhost -U sa -P your_password -Q "SELECT * FROM AdventureWorks2025.Sales.Orders" -o "C:\Temp\orders_sqlcmd.csv" -s "," -w 1000
注意:同样需要替换你的实际信息。
优点:
- 可以执行任意复杂的
SELECT语句。 - 输出格式可控。
缺点:
- 性能通常低于
bcp。 - 输出包含列标题和行号,可能需要后期处理。
生成 INSERT 脚本
如果你想在另一个数据库中重新创建表并插入数据,或者用于数据备份和迁移,生成 INSERT 脚本是最佳选择。
-
在 SSMS 中:
- 右键点击目标表。
- 选择 “编写脚本为” (Script as) -> “INSERT 到” (INSERT to) -> “新查询编辑器窗口” (New Query Editor Window)。
- SSMS 会生成一个包含
INSERT INTO ... VALUES (...)语句的脚本,每一行数据对应一个INSERT语句。 - 你可以将此脚本保存为
.sql文件。
-
使用
bcp生成脚本:bcp也可以生成INSERT脚本,但语法略有不同。bcp [数据库名].[架构名].[表名] out [文件路径] -S [服务器名] -U [用户名] -P [密码] -q -n -C 1252
-q:在bcp开头运行SET QUOTED_IDENTIFIER ON。-n:使用本机数据类型(native),生成的脚本是二进制格式,不是可读的INSERT语句,这个选项通常用于数据迁移。- 要生成可读的
INSERT脚本,通常使用-c或-w,但这会生成大量INSERT语句,效率不高。
优点:
- 包含完整的表结构和数据,便于迁移。
- 可以在任意 SQL Server 实例上执行。
缺点:
- 对于大表,生成的脚本文件会非常巨大,执行起来也很慢。
- 不适合作为数据交换格式。
总结与选择建议
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| SSMS 结果另存为 | 快速导出少量数据,临时查看 | 简单直观,无需额外工具 | 受界面限制,不适合大数据量 |
| SSMS 导出向导 | 导出到多种格式(Excel, CSV),需要筛选或转换 | 功能强大,灵活 | 步骤较多,图形化操作 |
bcp 工具 |
导出海量数据到文本文件,自动化脚本 | 性能最高,命令行友好 | 不直观,处理复杂查询不便 |
sqlcmd 工具 |
基于复杂查询导出数据到文件 | 可执行任意 SQL,输出可控 | 性能一般,输出格式需处理 |
| 生成 INSERT 脚本 | 数据库迁移、备份、重建表 | 包含结构和数据,通用性强 | 生成和执行慢,文件巨大 |
如何选择?
- 新手或临时导出少量数据:使用 SSMS 结果另存为。
- 需要导出到 Excel 或进行数据转换:使用 SSMS 导出向导。
- 需要导出几百万行数据,或用于自动化部署:
bcp是不二之选。 - 需要基于复杂的
JOIN或子查询导出数据:使用sqlcmd。 - 需要将表结构和数据一起迁移到另一个 SQL Server:使用 生成 INSERT 脚本 或直接使用 “任务” -> “生成脚本” 功能(在表或数据库上右键)。
