Как я могу получить описание таблицы (имена и типы полей) из базы данных Sybase? - PullRequest
24 голосов
/ 16 сентября 2009

У меня есть доступ к командной строке isql, и мне нравится получать метаданные всех таблиц данной базы данных, возможно, в отформатированном файле. Как мне этого добиться?

Спасибо.

Ответы [ 12 ]

56 голосов
/ 16 сентября 2009

Проверка sysobjects и syscolumns таблицы.

Здесь - диаграмма системных таблиц Sybase.

Список всех пользовательских таблиц:

SELECT * FROM sysobjects WHERE type = 'U'

Вы можете изменить 'U' на другие объекты:

  • C - вычисляемый столбец
  • D - по умолчанию
  • F - функция SQLJ
  • L - log
  • N - состояние раздела
  • P - процедура Transact-SQL или SQLJ
  • PR - подготовить объекты (созданные динамическим SQL)
  • R - правило
  • RI - ссылочное ограничение
  • S - системная таблица
  • TR - триггер
  • U - таблица пользователей
  • V - просмотр
  • XP - расширенная хранимая процедура

Список столбцов в таблице:

SELECT sc.* 
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'
43 голосов
/ 16 сентября 2009

sp_help - это то, что вы ищете.

Из онлайн-документации Sybase по системной процедуре sp_help :

Описание

Сообщает информацию об объекте базы данных (любом объекте, указанном в sysobjects) и о системных или пользовательских типах данных, а также о вычисляемых столбцах и функциональных индексах. Столбец отображает optimistic_index_lock .

Синтаксис

sp_help [objname]

[...]

Вот (частичный) вывод для таблицы издателей (вставлено из Использование sp_help для объектов базы данных ):

Name               Owner        Object_type     Create_date 
----------------   -----------  -------------   ------------------------------
publishers         dbo          user table      Nov 9 2004 9:57AM

(1 row affected)
Column_name Type     Length   Prec  Scale   Nulls   Default_name   Rule_name
----------- -------  ------   ----- ------- ------- -------------- ---------- 
pub_id      char          4    NULL  NULL        0  NULL           pub_idrule
pub_name    varchar      40    NULL  NULL        1  NULL           NULL
city        varchar      20    NULL  NULL        1  NULL           NULL
state       char          2    NULL  NULL        1  NULL           NULL
Access_Rule_name    Computed_Column_object     Identity
------------------- -------------------------  ------------
NULL                NULL                                  0
NULL                NULL                                  0
NULL                NULL                                  0
NULL                NULL                                  0

Все еще цитирование Использование sp_help для объектов базы данных :

Если вы выполняете sp_help без указания имени объекта, результирующий отчет показывает каждый объект в sysobjects вместе с его именем, владельцем и типом объекта. Также показан каждый определенный пользователем тип данных в systypes и его имя, тип хранилища, длина, допустимы ли нулевые значения, а также любые значения по умолчанию или правила, связанные с ним. В отчете также указывается, были ли определены какие-либо столбцы первичного или внешнего ключа для таблицы или представления.

6 голосов
/ 17 декабря 2014

Sybase IQ:

describe table_name;
4 голосов
/ 21 февраля 2015
     SELECT
DB_NAME() TABLE_CATALOG,
NULL TABLE_SCHEMA,
so.name TABLE_NAME,
sc.name COLUMN_NAME,
sc.colid ORDINAL_POSITION,
NULL COLUMN_DEFAULT,
CASE WHEN st.allownulls=1 THEN 'YES'
 ELSE 'NO'
END IS_NULLABLE,
st.name DATA_TYPE,
CASE WHEN st.name like '%char%' THEN st.length
END CHARACTER_MAXIMUM_LENGTH,
CASE WHEN st.name like '%char%' THEN st.length
END*2 CHARACTER_OCTET_LENGTH,
CASE WHEN st.name in ('numeric','int') THEN st.length
END NUMERIC_MAXIMUM_LENGTH,
CASE WHEN st.name in ('numeric','int') THEN st.prec
END NUMERIC_PRECISION,
NULL NUMERIC_PRECISION_RADIX,
CASE WHEN st.name in ('numeric','int') THEN st.scale
END NUMERIC_SCALE,
CASE WHEN st.name in ('datetime') THEN st.prec
END DATETIME_PRECISION,
NULL CHARACTER_SET_CATALOG,
NULL CHARACTER_SET_SCHEMA,
NULL COLLATION_CATALOG,
NULL COLLATION_SCHEMA,
NULL DOMAIN_CATALOG,
NULL DOMAIN_SCHEMA,
NULL DOMAIN_NAME
FROM 
sysobjects so
INNER JOIN 
syscolumns sc
ON sc.id = so.id
inner join systypes st on st.usertype = sc.usertype 
WHERE so.name = 'TableName'
2 голосов
/ 22 февраля 2011

Вы можете искать столбец во всех таблицах в базе данных, используя:

SELECT so.name 
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id 
WHERE sc.name = 'YOUR_COLUMN_NAME'
1 голос
/ 27 сентября 2013

При поиске пользовательской таблицы, если вы также хотите указать имя владельца таблицы, вы можете использовать следующее:

select su.name + '.' + so.name
from   sysobjects so,
       sysusers   su
where  so.type = 'U' and
       so.uid  = su.uid
order  by su.name,
          so.name
1 голос
/ 18 марта 2010

sp_tables также будет работать в isql. Выдает список таблиц в текущей базе данных.

0 голосов
/ 13 мая 2019

Для Sybase ASE sp_columns table_name вернет все метаданные таблицы, которые вы ищете.

0 голосов
/ 03 октября 2017

В используемой версии Sybase ниже приведен список столбцов для выбранной таблицы

select *
FROM sys.syscolumns sc
where tname = 'YOUR_TABLE_NAME'
--and creator='YOUR_USER_NAME' --if you want to further restrict tables
--according to the user name that created it
0 голосов
/ 25 октября 2013

Здесь другой подход для получения метаданных. Эта очень полезная команда SQL возвращает вам определение таблицы / представления в виде текста:

ВЫБРАТЬ текст ИЗ СИСТЕМОВ, ГДЕ id = OBJECT_ID ('MySchema.MyTable') ORDER BY номер, colid2, colid

Наслаждайтесь Patrick

...