菜鸟科技网

SQL Server如何快速导出表数据?

使用 SQL Server Management Studio (SSMS) 图形化界面

这是最简单、最直观的方法,适合不熟悉命令行的用户。

SQL Server如何快速导出表数据?-图1
(图片来源网络,侵删)

场景1:导出为数据文件(如 CSV, TXT)

这种方法直接将表数据导出为文本文件,方便被 Excel 或其他程序读取。

  1. 连接数据库:打开 SSMS 并连接到你的 SQL Server 实例。
  2. 选择表:在“对象资源管理器”中,找到并展开你要导出数据的数据库,然后展开“表”。
  3. 启动导出向导
    • 右键点击目标表。
    • 选择 “编写脚本为” (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 等)。

SQL Server如何快速导出表数据?-图2
(图片来源网络,侵删)
  1. 启动向导
    • 在 SSMS 的“对象资源管理器”中,右键点击你的数据库实例或数据库节点。
    • 选择 “任务” (Tasks) -> “导出数据...” (Export Data...)
  2. 选择数据源
    • 数据源:确保是 SQL Server Native Client 或你正在使用的连接类型。
    • 服务器名称:会自动填充。
    • 身份验证:选择你的登录方式(Windows 或 SQL Server)。
    • 数据库:选择源数据库。
    • 点击 “下一步”
  3. 选择目标
    • 目标:选择你想要导出的文件类型。
      • 平面文件目标:用于导出为 CSV 或 TXT 文件(最常用)。
      • Microsoft Excel:导出到 Excel 文件。
      • Microsoft Access:导出到 Access 数据库。
      • ODBC 数据源:导出到其他数据库。
    • 点击 “下一步”
  4. 指定表或查询
    • 选择 “编写查询以指定要传输的数据” (Write a query to specify the data to transfer)
    • 点击 “编辑查询...” (Edit Query...) 按钮,输入你的 SELECT 语句(SELECT * FROM YourTableName WHERE ...)。
    • 点击 “下一步”
  5. 列映射和转换
    • 在这一步,你可以查看列的映射关系。
    • 如果需要,可以点击“列映射”或“转换”选项卡进行修改,例如更改数据类型、设置目标列名等。
    • 对于简单的导出,通常可以跳过。
    • 点击 “下一步”
  6. 执行包
    • 你可以立即执行导出,也可以将此配置保存为一个 SSIS 包,以便以后重复使用。
    • 点击 “下一步”
  7. 完成
    • 确认信息无误后,点击 “完成”
    • 向导会显示执行进度和结果。

优点

  • 功能非常强大,支持多种目标格式。
  • 可以进行数据筛选和转换。
  • 可以保存为可重复使用的包。

缺点

  • 步骤相对较多,需要向导操作。

使用 T-SQL 命令

如果你需要自动化导出过程(例如在脚本或作业中执行),使用 T-SQL 是最佳选择。

场景1:使用 bcp 实用工具

bcp (Bulk Copy Program) 是一个命令行工具,专门用于在 SQL Server 实例和用户格式的文件之间大容量复制数据。这是导出大量数据最高效的方法

SQL Server如何快速导出表数据?-图3
(图片来源网络,侵删)

语法

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 身份验证和逗号分隔。

  1. 打开命令提示符 (CMD) 或 PowerShell
  2. 执行以下命令:
    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 脚本是最佳选择。

  1. 在 SSMS 中

    • 右键点击目标表。
    • 选择 “编写脚本为” (Script as) -> “INSERT 到” (INSERT to) -> “新查询编辑器窗口” (New Query Editor Window)
    • SSMS 会生成一个包含 INSERT INTO ... VALUES (...) 语句的脚本,每一行数据对应一个 INSERT 语句。
    • 你可以将此脚本保存为 .sql 文件。
  2. 使用 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 脚本 或直接使用 “任务” -> “生成脚本” 功能(在表或数据库上右键)。
分享:
扫描分享到社交APP
上一篇
下一篇