命令行执行带Select的WbExport脚本时输出文件缺失及列名问题
解决WbExport结合Select语句不生成输出文件的问题
你的核心问题应该是WbExport命令和后续的Select语句没有正确关联,导致SQL Workbench/J没捕获到查询结果来生成导出文件。下面是几个针对性的解决方案:
1. 将Select语句直接嵌入WbExport的-query参数
这是最可靠的方式,能确保WbExport明确针对指定查询结果导出,避免语句分离导致的关联问题。修改你的cmd_test.sql脚本如下:
WbExport -type=text -file='D:\Migration\CMD_TEST\employee.txt' -delimiter='~' -quotechar='^' -encoding=UTF8 -quoteCharEscaping=duplicate -formatFile=postgres -header=true -decimal='.' -dateFormat='yyyy-MM-dd' -replaceExpression='(\n|\r\n)' -replaceWith='' -query="select * from ces_prj_raymond_poc.dbo.employee";
这种写法直接把查询语句传给WbExport,不需要单独写Select,既保证列名被包含在头部,又能确保导出查询结果。
2. 确保WbExport和Select语句在同一个执行上下文
如果坚持分开写WbExport和Select,需要确保两者连续执行且无其他语句打断。可以尝试在脚本中添加自动提交配置,保证语句连续执行:
WbSet autoCommit=true; WbExport -type=text -file='D:\Migration\CMD_TEST\employee.txt' -delimiter='~' -quotechar='^' -encoding=UTF8 -quoteCharEscaping=duplicate -formatFile=postgres -header=true -decimal='.' -dateFormat='yyyy-MM-dd' -replaceExpression='(\n|\r\n)' -replaceWith=''; select * from ces_prj_raymond_poc.dbo.employee;
不过这种方式不如第一种嵌入-query参数的写法稳定。
3. 查看执行日志定位问题
如果还是不行,建议添加日志参数查看详细执行过程,确认Select是否真的执行。修改你的命令行:
java -jar sqlworkbench.jar -profile=New_profile -script=cmd_test.sql -logfile=wb_execution.log
执行后打开wb_execution.log,重点排查:
- 数据库连接是否有错误
- Select语句是否被执行、是否返回结果行数
- WbExport是否有报错(比如文件路径、权限问题)
4. 验证数据库连接和表权限
最后确认你的New_profile连接的数据库是否正确,当前用户是否有ces_prj_raymond_poc.dbo.employee表的查询权限。可以单独执行Select语句测试:
java -jar sqlworkbench.jar -profile=New_profile -query="select count(*) from ces_prj_raymond_poc.dbo.employee"
如果返回正确行数,说明连接和权限没问题;如果报错,先解决数据库连接或权限问题。
内容的提问来源于stack exchange,提问作者vishal waghmode
相关产品推荐
相关产品推荐

