Sybase Anywhere 11 元数据[SQL Schema]
前言
近兩天的工作是將以前項目的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.remarksfrom?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]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Exchange bin先常用工具
- 下一篇: Excel:如何使用函数实现多表多条件汇