Mam dostęp do wiersza poleceń isql i lubię uzyskiwać metadane wszystkich tabel z danej bazy danych, być może w sformatowanym pliku. Jak mogę to osiągnąć?Z bazy danych Sybase, w jaki sposób mogę uzyskać opis tabeli (nazwy i typy pól)?
Dzięki.
Mam dostęp do wiersza poleceń isql i lubię uzyskiwać metadane wszystkich tabel z danej bazy danych, być może w sformatowanym pliku. Jak mogę to osiągnąć?Z bazy danych Sybase, w jaki sposób mogę uzyskać opis tabeli (nazwy i typy pól)?
Dzięki.
Sprawdź tabele sysobjects i syscolumns.
Here to schemat tabel systemowych Sybase.
Lista wszystkich tabel użytkownika:
SELECT * FROM sysobjects WHERE type = 'U'
można zmienić 'U' do innych obiektów:
Lista kolumn w tabeli:
SELECT sc.*
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'
Jest to bardzo blisko pojedynczego stołu. Szukam tych samych danych we wszystkich tabelach bazy danych. – aartist
Stare pytanie wiem, ale jak mam to samo dla tymczasowego stołu? Nie mogę go znaleźć w sysobjects lub syscolumns. – 0fnt
Zastąp 'SELECT *' przez 'SELECT sc. *' Jeśli nie masz uprawnień dla niektórych kolumn na sysobjects (tak jak ja). –
Jeśli Sybase SQL-92 jest zgodny następnie te informacje są przechowywane w tabelach information_schema.
Więc dodaje daje listę tabel i widoków w dowolnej bazy danych SQL-92 zgodny
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
Niestety, tak nie jest ... Zarówno Sybase ASE, jak i Sybase SQL Anywhere są dostarczane z własnymi zastrzeżonymi widokami słownika –
@Lukas. Pozwolę sobie być innego zdania. Nie ma nic złego w tym, co powiedziałem. Z twojego oświadczenia wynika, że Sybase nie jest zgodna z SQL-92, a nie moja instrukcja jest nieprawidłowa. –
;-) Jak sobie życzysz. Ale pytanie naprawdę dotyczyło Sybase, a nie SQL 92 ... W rzeczywistości chodziło o Sybase ASE, nawet jeśli nie było to jednoznacznie stwierdzone przez PO ... –
sp_help
jest to, czego szukasz.
Od Sybase dokumentacji online z procedurą systemu sp_help:
Description
Reports information about a database object (any object listed in sysobjects) and about system or user-defined datatypes, as well as computed columns and function-based indexes. Column displays optimistic_index_lock.
Syntax
sp_help [objname]
[...]
Oto (częściowe) Wyjście dla tabeli publishers (wklejony z Using sp_help on database objects):
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
Still powołując Using sp_help on database objects:
If you execute sp_help without supplying an object name, the resulting report shows each object in sysobjects, along with its name, owner, and object type. Also shown is each user-defined datatype in systypes and its name, storage type, length, whether null values are allowed, and any defaults or rules bound to it. The report also notes if any primary or foreign key columns have been defined for a table or view.
Dlaczego ta odpowiedź nie zyskała większej liczby głosów upomnień? To jest idealne rozwiązanie. – Nicolai
Podoba mi się to rozwiązanie bardziej niż zapytanie do zastrzeżonych tabel słownika, ponieważ wydaje się prostsze i bardziej niezawodne. Czy zdajesz sobie sprawę [jak poprawnie pobrać wszystkie zestawy wyników z JDBC] (http://stackoverflow.com/questions/7298719/calling-sybase-adaptive-server-enterprises-sp-help-from-jdbc) –
link no dłużej działa dla sp_help. Próbowałem go i mojej wersji sybase mówi "Błąd: Procedura" sp_help "nie znaleziono (DBD: przygotować nie powiodło się)" – Joel
Jeśli chcesz używać programu wiersza poleceń, ale nie są ograniczone do korzystania z SQL, możesz użyć SchemaCrawler.SchemaCrawler jest open source i może tworzyć pliki w formacie tekstowym, CSV lub (X) HTML.
sp_tables
będzie również działać w isql. Daje listę tabel w bieżącej bazie danych.
Można wyszukiwać kolumny we wszystkich tabelach w bazie danych przy użyciu:
SELECT so.name
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id
WHERE sc.name = 'YOUR_COLUMN_NAME'
Po znalezieniu tabeli użytkownika, w przypadku, gdy chcemy nazwę właściciela tabeli również można użyć następujących:
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
Oto inne podejście do pobierania metadanych. To bardzo pomocna powraca poleceń SQL, tabela/definicja widoku jako tekst:
SELECT tekst z tabeli syscomments WHERE id = OBJECT_ID ('MySchema.MyTable') ORDER BY liczby, colid2, colid
Ciesz Patrick
Wydaje się pracować dla widoków, wyzwalaczy i procedur przechowywanych, ale nie dla tabel – tehvan
Sybase IQ:
describe table_name;
Dodawanie niektórych objaśnień kodu jest zawsze pożądane w dobra odpowiedź. Zobacz odpowiedź @ Pascala, aby uzyskać doskonałą odpowiedź, w której zamieścił linki do dokumentacji i skopiował odpowiednie informacje tutaj. –
Witam, myślę, że polecenie "opisz" nie istnieje w Sybase IQ –
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'
W wersji Sybase używam, daje następującą listę kolumn dla sel Okablowana tabela
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
to nie działa w Sybase ASE – markp
Używana wersja to SAP IQ 16 (Nowa nazwa dla Sybase) wybierz @@ wersja; @@ wersja SAP IQ/16.0.102.6.1386/20147/P/sp10.15 ... –
dezorientujesz kilka rzeczy ... 1) Sybase to nazwa firmy, która miała 4 różne produkty RDBMS (ASE, SQLAnywhere, IQ, Advantage) ... 2) około 8 lat temu SAP kupił Sybase, a przez te ostatnie 8 lat SAP powoli zastąpił nazwę "Sybase" słowem "SAP"; OP oznaczył to pytanie słowem "sybase-ase" oznaczającym "Sybase ASE"; w dzisiejszych czasach "Sybase ASE" ma kilka nazwisk ... "Sybase ASE" przez nas zagorzałych użytkowników ASE i "SAP ASE" przez wszystkich innych; Sybase ASE (inaczej SAP ASE) to nie to samo, co Sybase IQ (inaczej SAP IQ), tzn. ASE i IQ to 2 różne produkty RDBMS. – markp
Należy wspomnieć, że prawie nic nie wiem o bazie danych sybase. Szukam polecenia sql. – aartist