質問

DBIx ::クラス(::スキーマ::ローダー)のためのSybaseのスキーマをダンプPerlライブラリについては

は、私がINTROSPECTデフォルトと計算列にできるようにする必要があります。

私たちが持っていると仮定します:

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から元DEFAULT「foo」を得るのですか?

タイムスタンプ列は、列オブジェクトでも、デフォルトのSPROCを計算していませんが、私は何とかそれが実際にはタイムスタンプ列であることを知っておく必要があります。それのためにDBIによって返されるデータの種類を見ると、それは「varbinary型」、タイムスタンプの内部表現だと言われます。どのように私はそれがあるか、1?

でない場合は知っています

また、列「ADTは」計算列、ID 618182667を持つこの列のオブジェクトであることを私に伝えます。

:以外に有用思われる

そのidのsysobjectsに見ると、少し私に語りました

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参照のtypesystypes.type列。そのテーブルではname列は、データ型の名前が含まれています。

他のヒント

これは私がケースの誰に使ってしまったクエリが興味を持っているされます:

SELECT c.name name, t.name type, cm.text deflt
FROM syscolumns c         
JOIN sysobjects o ON c.id = o.id
LEFT JOIN systypes t ON c.type = t.type AND c.usertype = t.usertype
LEFT JOIN syscomments cm  
  ON cm.id = CASE WHEN c.cdefault = 0 THEN c.computedcol ELSE c.cdefault END
WHERE o.name = 'table_name' AND o.type = 'U'
私はまだいくつかのより多くのデータ型のテストを記述する必要があるものの、うまく動作するようです:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top