对于转储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