Иновиденные значения по умолчанию и вычисленные столбцы

StackOverflow https://stackoverflow.com/questions/2169427

  •  24-09-2019
  •  | 
  •  

Вопрос

Для библиотеки PERL, которая сбрасывает Sybase Schemas для DBIX :: Class (:: Schema :: Loader), мне нужно иметь возможность интрасформировать значения по умолчанию и вычисленные столбцы.

Предположим, у нас есть:

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, который возвращает значение. Как получить оригинал по умолчанию «Foo» из этого идентификатора?

Столбец Timestamp не имеет вычисленного объекта столбца и SPROC по умолчанию, но я как-то нужно знать, что это на самом деле столбец Timestamp. Глядя на тип данных, возвращаемый DBI, потому что он говорит мне, что это «varbinary», внутреннее представление метки времени. Как я знаю, есть ли это или не один?

Он также говорит мне, что столбец «ADT» - это компьютерный столбец, объект для этого столбца, имеющего ID 618182667.

Глядя в 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

Что касается столбцов метки времени, type столбец в ссылках SysColumns systypes.type. Отказ В этой таблице name Столбец содержит имя DataType.

Другие советы

Это запрос, которого я оказался, если кто-то заинтересован:

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