Pour une bibliothèque Perl qui sauvegarde les schémas Sybase pour DBIx :: Class (:: Schema :: Loader), je dois être capable d'introspecter les DEFAULTs et les colonnes calculées.Introspection des valeurs DEFAULT et des colonnes calculées
Supposons que nous ayons:
create table bar (
id INTEGER IDENTITY PRIMARY KEY,
foo VARCHAR(10) DEFAULT 'foo',
adt AS getdate(),
ts timestamp
)
est ici aussi loin que je suis:
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
Cela me dit que la colonne 'foo' a une procédure stockée avec ID 602182610 qui retourne la valeur. Comment puis-je obtenir l'original 'foo' par défaut de cet ID?
La colonne timestamp n'a pas d'objet de colonne calculé ni de sproc par défaut, mais je dois d'une certaine façon savoir qu'il s'agit en fait d'une colonne d'horodatage. En regardant le type de données renvoyé par DBI, il me dit que c'est 'varbinary', la représentation interne d'un horodatage. Comment savoir si c'est un ou non?
Il me dit aussi que la colonne « HAA » est une colonne calculée, l'objet de cette colonne ayant id 618182667.
Vous cherchez à sysobjects pour cette id me dit peu qui semble utile, sauf:
select substring(name,1,15) name, type from sysobjects where id = 618182667
name type
------------------------------ ----
bar_adt_6181826 C
Toute aide très appréciée.
Incidemment qui travaille pour colonnes calculées aussi! Merci beaucoup. –
systypes pour type = 37 renvoie à la fois varbinary et timestamp, comment puis-je savoir si une colonne spécifique est varbinary ou timestamp? –
Si je recherche dans les systypes avec le type et usertype, alors il me permet de distinguer timestamp et varbinary, cool. –