Czy istnieje instrukcja SQL, która może zwrócić typ kolumny w tabeli?Instrukcja SQL, aby uzyskać typ kolumny
Odpowiedz
Korzystanie z SQL Server:
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'yourTableName' AND
COLUMN_NAME = 'yourColumnName'
Tylko jeśli nie chcesz wyświetlać odpowiedniej nazwy kolumny. Zwróci to tylko typy. Jeśli chcesz zobaczyć nazwę kolumny, do której należy ten typ, będziesz musiał wybrać COLUMN_NAME również ... – HackyStack
Jeśli twoja tabela nie ma domyślnego schematu, możesz przedłużyć warunek za pomocą 'AND TABLE_SCHEMA = 'yourSchema'' – luviktor
jest świetny - ale czy możliwe jest również zwrócenie zakresu dla typu kolumny? tj. 'varchar (255)' zamiast 'varchar' i' int (11) 'zamiast' int'? – mmcrae
w TSQL/MSSQL to wygląda:
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.system_type_id = c.system_type_id
WHERE t.name = ''
Jeśli używasz MySQL można spróbować
SHOW COLUMNS FROM `tbl_name`;
przeciwnym razie powinieneś być w stanie zrobić
DESCRIBE `tbl_name`;
USE [YourDatabaseName]
GO
SELECT column_name 'Column Name',
data_type 'Data Type'
FROM information_schema.columns
WHERE table_name = 'YourTableName'
GO
Spowoduje to wyświetlenie wartości Nazwa kolumny, pokazującej nazwy kolumn oraz Typy danych tych kolumn (pliki wewnętrzne, varchary itp.).
Najłatwiej w TSQL jest:
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'yourTableName'
Dla IBM DB2:
SELECT TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA='your_schema_name' AND TABNAME='your_table_name' AND COLNAME='your_column_name'
w Oracle SQL byłoby to zrobić:
SELECT
DATA_TYPE
FROM
all_tab_columns
WHERE
table_name = 'TABLE NAME' -- in uppercase
AND column_name = 'COLUMN NAME' -- in uppercase
W moim przypadku potrzebowałem uzyskać typ danych dla Dynamic SQL (Shudder!), Tak czy inaczej tutaj jest funkcja, którą stworzyłem, która zwraca pełny typ danych. Na przykład zamiast wrócić „dziesiętny” byłoby powrócić dziesiętnego (18,4): dbo.GetLiteralDataType
dla SQL Server, ta procedura systemu przechowywane powróci wszystkie informacje o tabeli, w tym typów danych kolumn:
exec sp_help YOURTABLENAME
Podniosłem głos, ponieważ nie jest to dokładnie odpowiedź, ale dostarcza mi cennych informacji. Na przykład. informacje "IsComputed", których nie znalazłem w schemacie Information, ale mogę znaleźć w kodzie procedury sp_help i skopiować z tego. – Christoph
Działa również w widokach ... –
Korzystanie TSQL/MSSQL
To zapytanie będzie Ci: nazwa tabeli, nazwę kolumny, typ danych, długość typ danych, a dopuszczalne wartości null
SELECT TABLE_NAME,COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name'
ö rzeczą, która musi zostać zmieniona, jest your_table_name.
Korzystanie TSQL/MSSQL
Można użyć INTO
słowa kluczowego.
Wynikiem SELECT
w tabeli i
przykład: select .... INTO real_table_name
Po
sp_help real_table_name
użytkowania tego zapytania uzyskania schematu tabeli, kolumny typ, maksymalna 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 INNER JOIN SYS.TABLES tb ON tb.[object_id] = C.[object_id]
INNER JOIN SYS.TYPES T ON C.system_type_id = T.user_type_id
WHERE tb.[is_ms_shipped] = 0
ORDER BY tb.[Name]
Kolejna zmiana przy użyciu MS SQL:
SELECT TYPE_NAME(system_type_id)
FROM sys.columns
WHERE name = 'column_name'
AND [object_id] = OBJECT_ID('[dbo].[table_name]');
Dla Spark SQL:
DESCRIBE [db_name.]table_name column_name
Zależy RDBMS; SQL Server ma na przykład tabelę 'sys.syscolumns'. – LittleBobbyTables
Tak, ale będzie się różnić w zależności od typu używanego systemu 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 tabeli "INFORMATION_SCHEMA.COLUMNS" - jeśli masz go w RDBMS. – Bridge