對於轉儲DBIx ::類(::模式::裝載機)的Sybase架構一個Perl庫,我需要能夠自省默認值和計算列。反思默認值和計算列
假設我們有:
create table bar (
id INTEGER IDENTITY PRIMARY KEY,
foo VARCHAR(10) DEFAULT 'foo',
adt AS getdate(),
ts timestamp
)
這裏的,據我得到:
select substring(c.name,1,5) name, c.cdefault, c.computedcol from syscolumns c
join sysobjects o on c.id = o.id where o.name = 'bar' and o.type = 'U'
name cdefault computedcol
---------- ----------- -----------
id 0 NULL
foo 602182610 NULL
adt 0 618182667
ts 0 NULL
這告訴我,列「富」有ID 602182610一個返回值的存儲過程。我如何從這個ID獲得最初的DEFAULT'foo'?
時間戳列沒有計算列對象,也不是一個默認的存儲過程,但我不知要知道,它實際上是一個時間戳列。查看DBI返回的數據類型告訴我它是'varbinary',即時間戳的內部表示。我怎麼知道它是否是一個?
它還告訴我,列「ADT」是計算列,此列ID爲618182667.
尋找在sysobjects該ID的對象告訴我一點不同的是,似乎有用:
select substring(name,1,15) name, type from sysobjects where id = 618182667
name type
------------------------------ ----
bar_adt_6181826 C
任何幫助非常感謝。
順便說一句,對於工程計算列也!非常感謝你。 – 2010-01-31 12:12:07
類型= 37的systypes返回varbinary和timestamp,如何知道特定列是varbinary還是timestamp? – 2010-01-31 12:43:54
如果我用類型和usertype查找systype,那麼它可以讓我區分時間戳和varbinary,很酷。 – 2010-01-31 12:51:11