Как я могу получить описание таблицы (имена и типы полей) из базы данных Sybase?
-
07-07-2019 - |
Вопрос
У меня есть доступ к командной строке isql, и мне нравится получать метаданные всех таблиц данной базы данных, возможно, в отформатированном файле.Как я могу этого добиться?
Спасибо.
Решение
Проверять системные объекты и системные столбцы столы.
Здесь представляет собой диаграмму системных таблиц Sybase.
Список всех пользовательских таблиц:
SELECT * FROM sysobjects WHERE type = 'U'
Вы можете изменить букву «U» на другие объекты:
- C – вычисляемый столбец
- Д – по умолчанию
- F – функция SQLJ
- Л – журнал
- N – состояние раздела
- P — процедура Transact-SQL или SQLJ.
- PR – подготовка объектов (созданных Dynamic SQL)
- Р – правило
- RI – референтное ограничение
- S – системная таблица
- ТР – триггер
- U – таблица пользователей
- В – вид
- XP – расширенная хранимая процедура
Список столбцов в таблице:
SELECT sc.*
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'
Другие советы
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, его имя, тип хранения, длина, разрешены ли нулевые значения, а также любые значения по умолчанию или правила, привязанные к нему.В отчете также указывается, были ли определены какие-либо столбцы первичного или внешнего ключа для таблицы или представления.
Сибэйс IQ:
describe table_name;
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'
Вы можете искать столбец во всех таблицах базы данных, используя:
SELECT so.name
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id
WHERE sc.name = 'YOUR_COLUMN_NAME'
sp_tables
также будет работать в isql.Он дает вам список таблиц в текущей базе данных.
При поиске пользовательской таблицы, если вам также нужно имя владельца таблицы, вы можете использовать следующее:
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
Если вы хотите использовать программу командной строки, но не ограничены использованием SQL, вы можете использовать SchemaCrawler.SchemaCrawler имеет открытый исходный код и может создавать файлы в форматах обычного текста, CSV или (X)HTML.
Здесь другой подход к получению метаданных.Эта очень полезная команда SQL возвращает определение таблицы/представления в виде текста:
ВЫБРАТЬ текст ИЗ системных комментариев ГДЕ id = OBJECT_ID('MySchema.MyTable') ORDER BY номер, colid2, colid
Наслаждайтесь Патриком
В версии 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
Для Sybase ASE sp_columns table_name вернет все метаданные таблицы, которые вы ищете.
Если Sybase совместим с SQL-92, эта информация хранится в таблицах INFORMATION_SCHEMA.
Итак, следующее даст вам список таблиц и представлений в любой базе данных, совместимой с SQL-92.
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES