2009-09-15 11 views

Odpowiedz

52

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:

  • C - obliczane kolumna
  • D - domyślnie
  • F - funkcja SQLJ
  • L - log
  • N - partit Stan jonów
  • P - Transact-SQL lub procedura SQLJ
  • PR - przygotować przedmiotów (generowanych przez dynamiczny SQL)
  • R - zasada
  • RI - ograniczenie referencyjne
  • S - stół układ
  • TR - spust
  • U - stół użytkownik
  • V - widok
  • XP - rozszerzona procedura składowana

Lista kolumn w tabeli:

SELECT sc.* 
FROM syscolumns sc 
INNER JOIN sysobjects so ON sc.id = so.id 
WHERE so.name = 'my_table_name' 
+0

Jest to bardzo blisko pojedynczego stołu. Szukam tych samych danych we wszystkich tabelach bazy danych. – aartist

+1

Stare pytanie wiem, ale jak mam to samo dla tymczasowego stołu? Nie mogę go znaleźć w sysobjects lub syscolumns. – 0fnt

+0

Zastąp 'SELECT *' przez 'SELECT sc. *' Jeśli nie masz uprawnień dla niektórych kolumn na sysobjects (tak jak ja). –

-1

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 
+0

Niestety, tak nie jest ... Zarówno Sybase ASE, jak i Sybase SQL Anywhere są dostarczane z własnymi zastrzeżonymi widokami słownika –

+0

@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. –

+0

;-) 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 ... –

41

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.

+4

Dlaczego ta odpowiedź nie zyskała większej liczby głosów upomnień? To jest idealne rozwiązanie. – Nicolai

+0

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) –

+2

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

0

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.

2

sp_tables będzie również działać w isql. Daje listę tabel w bieżącej bazie danych.

2

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' 
1

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 
0

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

+0

Wydaje się pracować dla widoków, wyzwalaczy i procedur przechowywanych, ale nie dla tabel – tehvan

6

Sybase IQ:

describe table_name; 
+0

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. –

+0

Witam, myślę, że polecenie "opisz" nie istnieje w Sybase IQ –

3
 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' 
0

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 
+0

to nie działa w Sybase ASE – markp

+0

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 ... –

+0

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

Powiązane problemy