Sybase Anywhere 11 元数据[SQL Schema]
2010-04-25 00:04
323 查看
前言
近两天的工作是将以前项目的Sybase Anywhere 11数据库表结构以及数据导出到Sqlite上,起初想法是通过PowerDesigner来做反向工程然后再导出。装工具找资料折腾老半天,一方面不是很会用,勉强能将表反向工程到PowerDesigner,导出时又发现不支持Sqlite导出,隐约觉得到时候导数据可能还是有问题,所以决定放弃这条路线。之前有接触过代码生成,对取元数据(表结构)相对熟练,打算自己写代码来导出。由于之前没有接触过Sybase Anywhere 11数据库,所以也差不多弄了一天才把这个语句试出来,备忘和分享一下。
致谢
1. http://stackoverflow.com/questions/2263300/introspecting-identity-columns-in-sybase-sql-anywhere 是这个帖子中提到的systab帮助我找到相关的表
正文
一、取得所有用户表
select st.table_name,st.remarks from sysobjects tbl
inner join SYSTABLE st on st.object_id = tbl.id
where tbl.type = 'U' and tbl.uid = 1
二、取得表的详细字段信息
select c.name as ColumnName, c.length, c.prec, c.scale,baset.name as [DataType],stb.pkey,stb.[nulls],stb.[default],stb.remarks
from sysobjects tbl
inner join dbo.syscolumns as c on tbl.id=c.id
inner join SYSTABLE st on st.object_id = tbl.id
inner join SYSCOLUMN stb on stb.column_name = c.name and stb.table_id = st.table_id
inner join systypes as baset on c.type = baset.type and c.usertype = baset.usertype
where tbl.name='{0}' and tbl.type = 'U' and tbl.uid = 1
注意"tbl.name='{0}'"替换成表名,这里就不考虑额外的情况了。
三、注意问题
3.1 以上取表结构语句不能取到数据类型为“uniqueidentifierstr”的字段,这个字段在sysobjects和syscolumns没有!!但是SYSCOLUMN里面能找到,所以随后需要再研究一下,找到办法了会再来更新此文。
3.2 取试图和存储过程等其他取元数据的SQL语句随后要用到或者有时间并且能弄出来的话再贴出来更新此文。
结束语
明白原理了,就不用花大把大把的时间去研究人家工具了,一方面有点杀鸡用牛刀,再者自己写的时间比研究工具的时间可能要短,并且更加实用一些(找破解、一动就是几百兆的软件安装 - -#)。再次感谢搜索引擎,虽然没有直接找到,但是给的暗示足够我完成这项任务 : )
本博相关文章
1. ^全 ^ 获取SQL SERVER2000/2005、MySql、Oracle元数据的SQL语句 [SQL语句来自CodeSmith]
2. PowerDesigner 12 根据名称生成注释(续)
3. PowerDesigner 12 根据名称生成注释(完整示例)
近两天的工作是将以前项目的Sybase Anywhere 11数据库表结构以及数据导出到Sqlite上,起初想法是通过PowerDesigner来做反向工程然后再导出。装工具找资料折腾老半天,一方面不是很会用,勉强能将表反向工程到PowerDesigner,导出时又发现不支持Sqlite导出,隐约觉得到时候导数据可能还是有问题,所以决定放弃这条路线。之前有接触过代码生成,对取元数据(表结构)相对熟练,打算自己写代码来导出。由于之前没有接触过Sybase Anywhere 11数据库,所以也差不多弄了一天才把这个语句试出来,备忘和分享一下。
致谢
1. http://stackoverflow.com/questions/2263300/introspecting-identity-columns-in-sybase-sql-anywhere 是这个帖子中提到的systab帮助我找到相关的表
正文
一、取得所有用户表
select st.table_name,st.remarks from sysobjects tbl
inner join SYSTABLE st on st.object_id = tbl.id
where tbl.type = 'U' and tbl.uid = 1
二、取得表的详细字段信息
select c.name as ColumnName, c.length, c.prec, c.scale,baset.name as [DataType],stb.pkey,stb.[nulls],stb.[default],stb.remarks
from sysobjects tbl
inner join dbo.syscolumns as c on tbl.id=c.id
inner join SYSTABLE st on st.object_id = tbl.id
inner join SYSCOLUMN stb on stb.column_name = c.name and stb.table_id = st.table_id
inner join systypes as baset on c.type = baset.type and c.usertype = baset.usertype
where tbl.name='{0}' and tbl.type = 'U' and tbl.uid = 1
注意"tbl.name='{0}'"替换成表名,这里就不考虑额外的情况了。
三、注意问题
3.1 以上取表结构语句不能取到数据类型为“uniqueidentifierstr”的字段,这个字段在sysobjects和syscolumns没有!!但是SYSCOLUMN里面能找到,所以随后需要再研究一下,找到办法了会再来更新此文。
3.2 取试图和存储过程等其他取元数据的SQL语句随后要用到或者有时间并且能弄出来的话再贴出来更新此文。
结束语
明白原理了,就不用花大把大把的时间去研究人家工具了,一方面有点杀鸡用牛刀,再者自己写的时间比研究工具的时间可能要短,并且更加实用一些(找破解、一动就是几百兆的软件安装 - -#)。再次感谢搜索引擎,虽然没有直接找到,但是给的暗示足够我完成这项任务 : )
本博相关文章
1. ^全 ^ 获取SQL SERVER2000/2005、MySql、Oracle元数据的SQL语句 [SQL语句来自CodeSmith]
2. PowerDesigner 12 根据名称生成注释(续)
3. PowerDesigner 12 根据名称生成注释(完整示例)
相关文章推荐
- Sybase Anywhere 11 元数据[SQL Schema]
- 解决Sybase ASE中的dbisql (interactive sql)和Sybase SQL Anywhere中的dbisql相互打架问题
- Repair for Sybase SQL Anywhere (SQL Anywhere DB数据库修复工具)1.0
- Sybase ASA (11及以后版本)中获取表定义的SQL语句及SP
- 张策:SQL Anywhere教程(11)
- SUP (SAP Mobile SDK 2.2) 连接 Sybase SQL Anywhere sample 数据库
- Sybase SQL Anywhere 9 数据库修复成功
- Sybase SQL Anywhere 和 UltraLite 相关文章
- 研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
- Sybase Sql Anywhere(ASA)数据库断电损坏的数据恢复
- ODBC连接sybase sql anywhere open server
- SAP Sybase SQLAnywhere 12的一次unload/reload来重建数据库
- 检查确认Sybase SQL Anywhere的license
- Sybase的SQL Anywhere for BlackBerry
- Sybase SQL Anywhere 12 数据库JDBC访问
- SQL Anywhere 11 (Panorama) 评审指南 Part IX
- Sybase SQL Anywhere 7 数据库修复成功
- Sybase及SQL Anywhere SQL语句小结
- SQL Anywhere 11 (Panorama) 评审指南 Part II
- 如何利用powerbulder 9.0打开sybase sql anywhere 6.0的数据文件