Tergantung pada RDBMS; SQL Server memiliki sys.syscolumnstabel misalnya.
LittleBobbyTables - Au Revoir
3
Ya, tetapi itu akan berbeda tergantung pada jenis RDBMS apa yang Anda gunakan - SQL adalah bahasa, bukan produk basis data, dan pertanyaan ini bergantung pada produk tertentu. Anda akan dapat menemukan informasi semacam ini di INFORMATION_SCHEMA.COLUMNStabel - jika RDBMS Anda memilikinya.
Jembatan
Jawaban:
461
Menggunakan SQL Server:
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME ='yourTableName'AND
COLUMN_NAME ='yourColumnName'
Hanya jika Anda tidak ingin melihat nama kolom yang sesuai. Ini hanya akan mengembalikan tipenya. Jika Anda ingin melihat nama kolom, jenis itu milik Anda, Anda juga harus memilih COLUMN_NAME ...
HackyStack
5
Dan jika meja Anda tidak ada dalam skema default, Anda dapat memperpanjang kondisi denganAND TABLE_SCHEMA = 'yourSchema'
luviktor
8
ini hebat - tetapi apakah mungkin untuk mengembalikannya untuk jenis kolom? yaitu varchar(255)bukannya varchardan int(11)bukannya int?
Don Cheadle
13
@mmcrae: Dimungkinkan menggunakan kolom CHARACTER_MAXIMUM_LENGTHdalam INFORMATION_SCHEMA.COLUMNS. Lakukan a SELECT * FROM INFORMATION_SCHEMA.COLUMNSuntuk melihat semua kolom yang tersedia.
Francis P
2
Bagaimana dengan tabel sementara?
Ilya Gazman
77
Cara termudah dalam TSQL adalah:
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='yourTableName'
Saya diputuskan karena hal ini walaupun bukan jawaban yang tepat tetapi memberikan informasi berharga kepada saya. Misalnya informasi "IsComputed" yang saya tidak temukan dalam skema Informasi tetapi saya dapat menemukan dalam kode prosedur sp_help dan salin dari sana.
Christoph
2
pilih nama tabel dan klik Alt+F1.. memberikan hasil yang sama.
Pugal
untuk memperjelas: tabel atau nama tampilan harus dipilih di editor dan kemudian tekan Alt+F1. Tidak dalam solusi Object Explorer. Ini adalah fitur yang sangat membantu
bugybunny
18
Dalam TSQL / MSSQL sepertinya:
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 =''
Dengan sebaliknya Anda maksudkan RDBMS lain selain dari MySQL?
Lamak
2
Iya. The DESCRIBEsintaks berlaku di Oracle juga, namun MSSQL tidak akan menerima sintaks ini.
fimas
Lihat jawaban dari @jTC untuk metode pada MSSQL dan TSQL.
fimas
Versi MySQL yang lebih baru information_schema.COLUMNS.
Rick James
Saya menemukan DESC atau DESCRIBE (tergantung pada DBMS yang Anda gunakan) berguna untuk tabel kecil dengan 3 atau 4 kolom kemudian itu menunjukkan struktur tabel dengan nama kolom Nullable flag dan tipe kolom untuk tabel besar namun butuh lebih banyak waktu untuk mengembalikan hasil dan itu lebih sulit untuk menemukan informasi yang Anda butuhkan.
kecepatan
7
Variasi lain menggunakan MS SQL:
SELECT TYPE_NAME(system_type_id)FROM sys.columns
WHERE name ='column_name'AND[object_id]= OBJECT_ID('[dbo].[table_name]');
Untuk membangun jawaban di atas, sering kali berguna untuk mendapatkan tipe data kolom dalam format yang sama dengan yang Anda butuhkan untuk mendeklarasikan kolom.
Sebagai contoh, varchar(50), varchar(max),decimal(p, s) .
Ini memungkinkan Anda untuk melakukan itu:
SELECT[Name]= c.[name],[Type]=CASEWHEN tp.[name]IN('varchar','char')THEN tp.[name]+'('+ IIF(c.max_length =-1,'max', CAST(c.max_length AS VARCHAR(25)))+')'WHEN tp.[name]IN('nvarchar','nchar')THEN tp.[name]+'('+ IIF(c.max_length =-1,'max', CAST(c.max_length /2AS VARCHAR(25)))+')'WHEN tp.[name]IN('decimal','numeric')THEN tp.[name]+'('+ CAST(c.[precision]AS VARCHAR(25))+', '+ CAST(c.[scale]AS VARCHAR(25))+')'WHEN tp.[name]IN('datetime2')THEN tp.[name]+'('+ CAST(c.[scale]AS VARCHAR(25))+')'ELSE tp.[name]END,[RawType]= tp.[name],[MaxLength]= c.max_length
,[Precision]= c.[precision],[Scale]= c.scale
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types tp ON c.user_type_id = tp.user_type_id
WHERE s.[name]='dbo'AND t.[name]='MyTable'
Untuk mengambil tipe data yang dinyatakan sebenarnya, misalnya untuk digunakan dalam SQL dinamis ke ALTER COLUMNs, sesuatu seperti ini dapat digunakan:
Dalam kasus saya, saya perlu mendapatkan tipe data untuk Dynamic SQL (Shudder!) Tetap di sini adalah fungsi yang saya buat yang mengembalikan tipe data lengkap. Misalnya, alih-alih mengembalikan 'desimal', itu akan mengembalikan DECIMAL (18,4): dbo.GetLiteralDataType
Gunakan kueri ini untuk mendapatkan Skema, Tabel, Kolom, Jenis, max_length, 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")))
'dan sampel (valRs adalah fungsi saya untuk rs.fields ("CHARACTER_MAXIMUM_LENGTH"). nilai):
sys.syscolumns
tabel misalnya.INFORMATION_SCHEMA.COLUMNS
tabel - jika RDBMS Anda memilikinya.Jawaban:
Menggunakan SQL Server:
sumber
AND TABLE_SCHEMA = 'yourSchema'
varchar(255)
bukannyavarchar
danint(11)
bukannyaint
?CHARACTER_MAXIMUM_LENGTH
dalamINFORMATION_SCHEMA.COLUMNS
. Lakukan aSELECT * FROM INFORMATION_SCHEMA.COLUMNS
untuk melihat semua kolom yang tersedia.Cara termudah dalam TSQL adalah:
sumber
Untuk SQL Server, prosedur yang disimpan sistem ini akan mengembalikan semua informasi tabel, termasuk tipe data kolom:
sumber
Alt+F1
.. memberikan hasil yang sama.Alt+F1
. Tidak dalam solusi Object Explorer. Ini adalah fitur yang sangat membantuDalam TSQL / MSSQL sepertinya:
sumber
JOIN sys.types y ON y.user_type_id = c.user_type_id
system_type_id tidak unik. sys.columns docdalam oracle SQL Anda akan melakukan ini:
sumber
Jika Anda menggunakan MySQL, Anda bisa mencoba
TAMPILKAN KOLOM di dev.mysql.com
Kalau tidak, Anda harus dapat melakukannya
sumber
DESCRIBE
sintaks berlaku di Oracle juga, namun MSSQL tidak akan menerima sintaks ini.information_schema.COLUMNS
.Variasi lain menggunakan MS SQL:
sumber
Menggunakan TSQL / MSSQL
Kueri ini akan memberi Anda: nama tabel, nama kolom, tipe data, panjang tipe data, dan null yang diizinkan
Satu-satunya hal yang perlu diubah adalah your_table_name.
sumber
Untuk membangun jawaban di atas, sering kali berguna untuk mendapatkan tipe data kolom dalam format yang sama dengan yang Anda butuhkan untuk mendeklarasikan kolom.
Sebagai contoh,
varchar(50)
,varchar(max)
,decimal(p, s)
.Ini memungkinkan Anda untuk melakukan itu:
sumber
WHEN
baris pertama :WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
Ini akan mengembalikan nilai-nilai Nama Kolom, menunjukkan kepada Anda nama-nama kolom, dan Tipe Data dari kolom tersebut (ints, varchars, dll).
sumber
Untuk IBM DB2 :
sumber
Untuk mengambil tipe data yang dinyatakan sebenarnya, misalnya untuk digunakan dalam SQL dinamis ke ALTER COLUMNs, sesuatu seperti ini dapat digunakan:
sumber
Dalam kasus saya, saya perlu mendapatkan tipe data untuk Dynamic SQL (Shudder!) Tetap di sini adalah fungsi yang saya buat yang mengembalikan tipe data lengkap. Misalnya, alih-alih mengembalikan 'desimal', itu akan mengembalikan DECIMAL (18,4): dbo.GetLiteralDataType
sumber
Menggunakan TSQL / MSSQL
Anda bisa menggunakan
INTO
kata kunci.Hasil dari
SELECT
menjadi TABEL nyataContoh:
select .... INTO real_table_name
Setelah
sumber
Gunakan kueri ini untuk mendapatkan Skema, Tabel, Kolom, Jenis, max_length, is_nullable
sumber
Ini akan memberi Anda informasi tentang semua kolom dari tabel.
sumber
Untuk Spark SQL :
sumber
Untuk Apache Derby seperti yang ditunjukkan dalam jawaban ini :
sumber
Di vb60 Anda bisa melakukan ini:
'dan sampel (valRs adalah fungsi saya untuk rs.fields ("CHARACTER_MAXIMUM_LENGTH"). nilai):
sumber
Karena beberapa orang meminta ketepatan juga dengan tipe data, saya ingin membagikan skrip yang saya buat untuk tujuan seperti itu.
Itu tidak sempurna tetapi berfungsi dalam banyak kasus.
Menggunakan
Sql-Server
sumber
Opsi lain untuk MS SQL adalah mengganti
select
kueri di sini dengan kueri yang Anda inginkan jenisnya:sumber