对于为DBIx :: Class(:: Schema :: Loader)转储Sybase模式的Perl库,我需要能够进行内部检查DEFAULT和计算列。

假设我们有:

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


这告诉我列'foo'具有ID为602182610的存储过程,该存储过程返回该值。如何从此ID获取原始的默认'foo'?

timestamp列没有计算列对象或默认的sproc,但是我某种程度上需要知道它实际上是一个timestamp列。查看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


任何帮助,不胜感激。

最佳答案

关于第一个问题,关于默认值

select text from syscomments
where id = 602182610


对于时间戳列,syscolumns中的type列引用systypes.type。在该表的name列中包含数据类型名称。

08-03 15:25