前言
近兩天的工作是将以前項目的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 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語句随後要用到或者有時間并且能弄出來的話再貼出來更新此文。
結束語
明白原理了,就不用花大把大把的時間去研究人家工具了,一方面有點殺雞用牛刀,再者自己寫的時間比研究工具的時間可能要短,并且更加實用一些(找破解、一動就是幾百兆的軟體安裝 - -#)。再次感謝搜尋引擎,雖然沒有直接找到,但是給的暗示足夠我完成這項任務 : )
轉載:http://www.cnblogs.com/over140/archive/2010/04/25/1718440.html