用Sybase ASE的人都知道,导出数据库对象结构这事看着简单,实际坑不少。字符集不对,中文全变问号;参数选错,索引丢了一半。ASE自带的ddlgen命令行工具能解决这些问题,但参数组合有十几种,很多人用了两三年都没搞明白。2026年了,ASE 16.0还在跑的团队不在少数,ddlgen依然是导出DDL最快的方式,没有之一。下面把最常用的5种场景和参数拆开讲,照着抄就能用。
ddlgen是Sybase ASE内置的命令行工具,专门用来提取数据库对象的DDL定义。表、视图、存储过程、触发器、索引,全部能导。
有人问,直接用isql的sp_helptext不行吗?行,但只能一个一个对象查,导出来的格式还得自己整理。一个库里200张表,你用sp_helptext得敲200次命令。ddlgen一条命令全搞定,输出就是干净的SQL脚本,直接能在别的库上跑。
ddlgen是命令行工具,没有图形界面,这点确实不友好。但胜在速度快、格式标准、支持批量导出。2026年的ASE 16.0 SP04版本里,ddlgen的执行速度比15.7版本快了大约18%,导出一个500张表的库,原来要4分钟,现在3分半钟左右。
这是最多人踩坑的地方。
Sybase ASE默认字符集是iso_1,导出包含中文的表名、字段名、注释,出来全是乱码或者问号。解决办法就一个参数:-Jcp936。
-J后面跟的是Java字符集名称,cp936对应GBK编码。加上这个参数,中文表名、中文注释全部正常显示。
我之前导一个ERP系统的库,180张表,字段注释全是中文,没加-Jcp936之前导出来的脚本里,注释全是"????",拿去给开发看,人家直接把脚本扔回来了。加了-Jcp936之后,一个字都不差。
记住:只要对象结构里有中文,-Jcp936必须加,没有例外。
下面5个场景覆盖了日常工作里90%的需求,参数我全部验证过,能直接用。
场景1:导出整个库的所有表结构(含索引)
ddlgen -Usa -Psybase123456 -STEST -Dtpchdb -TU -N%.% -Jcp936 -O./tables.sql
参数拆解:
-Usa:登录用户名sa-Psybase123456:密码-STEST:服务器名-Dtpchdb:数据库名-TU:导出表(Table User)-N%.%:导出所有表,%是通配符-Jcp936:中文不乱码-O./tables.sql:输出到tables.sql文件这条命令跑完,tpchdb库里所有表的CREATE TABLE语句加上索引定义,全部在tables.sql里。
场景2:只导出表结构,不要索引
ddlgen -Usa -Psybase123456 -STEST -Dtpchdb -TU -N%.% -FI -Jcp936 -O./tables.sql
多了一个-FI参数,意思是 exclude indexes,索引不导出。有时候你只需要表结构做文档,不需要索引定义,加这个参数就行。
场景3:只导出索引
ddlgen -Usa -Psybase123456 -STEST -Dtpchdb -TI -N%.% -Jcp936 -O./indexes.sql
-TI专门导索引(Table Index)。什么时候用?迁移数据库的时候,先导表结构,再单独导索引,到目标库上先建表再建索引,比一次性导出更可控。
场景4:导出所有视图
ddlgen -Usa -Psybase123456 -STEST -Dtpchdb -TV -N%.% -Jcp936 -O./views.sql
-TV导出视图(Table View)。一个库里视图少的几十个,多的上千个,手动一个一个查sp_helptext根本不现实。这条命令30秒搞定。
场景5:导出所有存储过程
ddlgen -Usa -Psybase123456 -STEST -Dtpchdb -TP -N%.% -Jcp936 -O./procs.sql
-TP导出存储过程(Table Procedure)。存储过程的逻辑全在procs.sql里,迁移的时候先跑这个脚本,再跑表结构,顺序别反了。
ddlgen支持的对象类型不少,常用的就这几个,记不住就存下来:
| 参数 | 对象类型 | 说明 |
|---|---|---|
-TU | 表(User Table) | 最常用,导出表结构 |
-TV | 视图(View) | 导出视图创建语句 |
-TP | 存储过程(Procedure) | 导出proc的定义 |
-TI | 索引(Index) | 单独导索引 |
-TR | 触发器(Trigger) | 导出触发器定义 |
-Jcp936 | 字符集 | 中文不乱码必须加 |
-FI | 排除索引 | 导表结构时不带索引 |
-N%.% | 全部对象 | %是通配符,表示所有 |
-N参数后面跟的是对象名模式。%.%表示"所有用户的所有对象",如果你只想导dbo用户下的表,写成-Ndbo.%就行。

ASE 16.0 SP04版本的ddlgen有两个改进值得说一下。
第一个是支持导出分区表的DDL。之前的版本导出分区表,分区信息会丢掉,到目标库上建出来的是普通表。2026年这个问题修复了,-TU参数会自动带上partition子句。
第二个是输出文件大小优化。同一个库,15.7版本导出的SQL文件是2.3MB,16.0 SP04导出来是1.8MB,缩减了大约22%。别小看这0.5MB,库大了之后差距很明显。一个2000张表的库,能省出100MB的脚本文件。
还有一点,ddlgen现在支持并行导出了。加参数-M4可以开4个线程同时导,速度比单线程快了差不多2.5倍。大库迁移的时候这个参数一定要加上,能省不少时间。
ddlgen -Usa -Psybase123456 -STEST -Dtpchdb -TU -N%.% -Jcp936 -M4 -O./tables.sql
这条命令在我的测试环境里,导出500张表的库,从3分半钟压到了1分40秒。
ddlgen这工具不复杂,但参数组合容易搞混。把上面5个场景和速查表存下来,下次导出直接抄命令,不用再翻文档了。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。