2010-02-14 14 views
2

Pour une table telle que:colonnes Introspection IDENTITÉ

create table foo (id int identity primary key) 

je voudrais interroger les tables système pour déterminer que id est en fait une colonne IDENTITY.

La chose la plus proche que j'ai trouvé:

select tc.max_identity from systabcol tc 
join systab t on t.table_id = tc.table_id 
where t.table_name = 'foo' 

Malheureusement max_identity est 0 même pour les colonnes qui ne sont pas des identités, et est également 0 des identités qui n'ont pas encore été utilisées. Cela aurait été bien si c'était NULL pour les non-identités.

Je peux utiliser la fonction GET_IDENTITY pour vérifier si une table a une colonne IDENTITY, mais ensuite je perds une valeur d'identité et je ne sais toujours pas de quelle colonne il s'agit.

Toute aide très appréciée, c'est la dernière chose dont j'ai besoin pour la prise en charge SQL Anywhere de base dans DBIx :: Class :: Schema :: Loader dans 0.05002.

Répondre

1

SyBooks Online Notez la colonne d'état. C'est ASE, mais c'est peut-être la même chose.

0

Il semble que je peux utiliser le « default » colonne SYSTABCOL: colonne

select tc.[default] 
from systabcol tc 
join systab t on t.table_id = tc.table_id 
where t.table_name = 'foo' 

lorsque le « par défaut » est réglé sur « autoincrement » il est une colonne IDENTITY.