Zależy od RDBMS; SQL Server ma sys.syscolumnsna przykład tabelę.
LittleBobbyTables - Au Revoir
3
Tak, ale będzie różnie w zależności od używanego typu RDBMS - SQL to język, a nie produkt bazy danych, a to pytanie zależy od konkretnego produktu. Będziesz mógł znaleźć tego rodzaju informacje w INFORMATION_SCHEMA.COLUMNStabeli - jeśli Twój RDBMS je posiada.
Most
Odpowiedzi:
460
Za pomocą programu SQL Server:
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME ='yourTableName'AND
COLUMN_NAME ='yourColumnName'
Tylko jeśli nie chcesz zobaczyć odpowiedniej nazwy kolumny. Zwróci to tylko typy. Jeśli chcesz zobaczyć nazwę kolumny, do której należy ten typ, musisz także wybrać COLUMN_NAME również ...
HackyStack
5
A jeśli twój stół nie jest w domyślnym schemacie, możesz przedłużyć ten stan oAND TABLE_SCHEMA = 'yourSchema'
luviktor
8
to świetnie - ale czy można również zwrócić zakres dla typu kolumny? tj. varchar(255)zamiast varchari int(11)zamiast int?
Don Cheadle
13
@mmcrae: Możliwe jest użycie kolumny CHARACTER_MAXIMUM_LENGTHw INFORMATION_SCHEMA.COLUMNS. Po prostu zrób a, SELECT * FROM INFORMATION_SCHEMA.COLUMNSaby zobaczyć wszystkie dostępne kolumny.
Francis P
2
Co z tymczasowymi stolikami?
Ilya Gazman
77
Najłatwiejszym sposobem w TSQL jest:
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='yourTableName'
Głosowałem za tym, ponieważ nie jest to dokładnie odpowiedź, ale dostarcza mi cennych informacji. Np. Informacje „IsComputed”, których nie znalazłem w schemacie informacji, ale mogę je znaleźć w kodzie procedury sp_help i stamtąd skopiować.
Christoph
2
wybierz nazwę tabeli i kliknij Alt+F1.. daje ten sam wynik.
Pugal
w celu wyjaśnienia: nazwę edytora lub tabeli należy wybrać w edytorze, a następnie nacisnąć Alt+F1. Nie w rozwiązaniu Object Explorer. Jest to bardzo przydatna funkcja
bugybunny
18
W TSQL / MSSQL wygląda to tak:
SELECT t.name, c.name
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types y ON y.user_type_id = c.user_type_id
WHERE t.name =''
W przeciwnym razie masz na myśli inne RDBMS oprócz MySQL?
Lamak,
2
Tak. DESCRIBESkładnia jest poprawna w Oracle, jak również, jednak MsSQL nie zaakceptuje tej składni.
fimas
Zobacz odpowiedź na @jTC dla metody na MSSQL i TSQL.
fimas
Nowsze wersje MySQL mają information_schema.COLUMNS.
Rick James
Uważam, że DESC LUB DESCRIBE (w zależności od używanego DBMS) jest przydatny dla małych tabel z 3 lub 4 kolumnami, a następnie pokazuje strukturę tabeli z nazwą kolumny Nullable flag i typ kolumny dla dużych tabel, jednak zwracanie wyniku zajmuje więcej czasu i trudniej jest znaleźć potrzebne informacje.
prędkość
7
Kolejna odmiana korzystająca z MS SQL:
SELECT TYPE_NAME(system_type_id)FROM sys.columns
WHERE name ='column_name'AND[object_id]= OBJECT_ID('[dbo].[table_name]');
W moim przypadku i tak potrzebowałem uzyskać typ danych dla Dynamic SQL (Shudder!). Oto funkcja, którą utworzyłem, która zwraca pełny typ danych. Na przykład zamiast zwracać „dziesiętny”, zwraca DECIMAL (18,4): dbo.GetLiteralDataType
Użyj tego zapytania, aby uzyskać schemat, tabelę, kolumnę, typ, maksymalną długość, is_nullable
SELECT QUOTENAME(SCHEMA_NAME(tb.[schema_id]))AS'Schema',QUOTENAME(OBJECT_NAME(tb.[OBJECT_ID]))AS'Table',C.NAME as'Column',T.name AS'Type',C.max_length
,C.is_nullable
FROM SYS.COLUMNS C INNERJOIN SYS.TABLES tb ON tb.[object_id]= C.[object_id]INNERJOIN SYS.TYPES T ON C.system_type_id = T.user_type_id
WHERE tb.[is_ms_shipped]=0ORDERBY tb.[Name]
select columndatatype from sys.syscolumns
where referenceid =(select tableid from sys.systables
where tablename ='YOUR_TABEL_NAME'and columnname='YOUR_COLUMN_NAME')
Public Cn As ADODB.Connection
'open connection
Dim Rs As ADODB.Recordset
Set Rs = Cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, UCase("Table"), UCase("field")))
”i sample (valRs to moja funkcja dla rs.fields („ CHARACTER_MAXIMUM_LENGTH ”). wartość):
sys.syscolumns
na przykład tabelę.INFORMATION_SCHEMA.COLUMNS
tabeli - jeśli Twój RDBMS je posiada.Odpowiedzi:
Za pomocą programu SQL Server:
źródło
AND TABLE_SCHEMA = 'yourSchema'
varchar(255)
zamiastvarchar
iint(11)
zamiastint
?CHARACTER_MAXIMUM_LENGTH
wINFORMATION_SCHEMA.COLUMNS
. Po prostu zrób a,SELECT * FROM INFORMATION_SCHEMA.COLUMNS
aby zobaczyć wszystkie dostępne kolumny.Najłatwiejszym sposobem w TSQL jest:
źródło
W przypadku SQL Server ta procedura składowana w systemie zwróci wszystkie informacje o tabeli, w tym typy danych kolumn:
źródło
Alt+F1
.. daje ten sam wynik.Alt+F1
. Nie w rozwiązaniu Object Explorer. Jest to bardzo przydatna funkcjaW TSQL / MSSQL wygląda to tak:
źródło
JOIN sys.types y ON y.user_type_id = c.user_type_id
system_type_id nie jest unikalny. sys.columns docw Oracle Oracle zrobiłbyś to:
źródło
Jeśli używasz MySQL, możesz spróbować
POKAŻ KOLUMNY na dev.mysql.com
W przeciwnym razie powinieneś być w stanie to zrobić
źródło
DESCRIBE
Składnia jest poprawna w Oracle, jak również, jednak MsSQL nie zaakceptuje tej składni.information_schema.COLUMNS
.Kolejna odmiana korzystająca z MS SQL:
źródło
Korzystanie z TSQL / MSSQL
To zapytanie zapewni Ci: nazwę tabeli, nazwę kolumny, typ danych, długość typu danych i dopuszczalne wartości null
Jedyną rzeczą, którą należy zmienić, jest nazwa_tabeli.
źródło
Aby wykorzystać powyższe odpowiedzi, często przydatne jest uzyskanie typu danych kolumny w tym samym formacie, w którym należy zadeklarować kolumny.
Na przykład
varchar(50)
,varchar(max)
,decimal(p, s)
.To pozwala ci to zrobić:
źródło
WHEN
wiersza:WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
Zwróci to wartości Nazwa kolumny, pokazując nazwy kolumn i typy danych tych kolumn (ints, varchars itp.).
źródło
W przypadku IBM DB2 :
źródło
Aby pobrać rzeczywiste zadeklarowane typy danych, na przykład do użycia w dynamicznym SQL do ZMIEŃ KOLUMNY, można użyć czegoś takiego:
źródło
W moim przypadku i tak potrzebowałem uzyskać typ danych dla Dynamic SQL (Shudder!). Oto funkcja, którą utworzyłem, która zwraca pełny typ danych. Na przykład zamiast zwracać „dziesiętny”, zwraca DECIMAL (18,4): dbo.GetLiteralDataType
źródło
Korzystanie z TSQL / MSSQL
Możesz użyć
INTO
słowa kluczowego.Wynik
SELECT
w prawdziwej TABELIPrzykład:
select .... INTO real_table_name
Po
źródło
Użyj tego zapytania, aby uzyskać schemat, tabelę, kolumnę, typ, maksymalną długość, is_nullable
źródło
Otrzymasz informacje o wszystkich kolumnach z tabeli.
źródło
W przypadku Spark SQL :
źródło
Dla Apache Derby, jak pokazano w tej odpowiedzi :
źródło
W vb60 możesz to zrobić:
”i sample (valRs to moja funkcja dla rs.fields („ CHARACTER_MAXIMUM_LENGTH ”). wartość):
źródło
Ponieważ niektóre osoby pytały również o precyzję typu danych, chciałbym udostępnić mój skrypt, który stworzyłem w tym celu.
To nie jest idealne, ale działa w większości przypadków.
Za pomocą
Sql-Server
źródło
Inną opcją dla MS SQL jest zastąpienie
select
zapytania tutaj zapytaniem, którego chcesz użyć:źródło