2012-11-15 13 views
164

पाने के लिए वहाँ एक एसक्यूएल बयान है कि एक तालिका में किसी स्तंभ के प्रकार लौट सकते है?SQL विवरण स्तंभ प्रकार

+4

आरडीबीएमएस पर निर्भर करता है; उदाहरण के लिए SQL सर्वर में 'sys.syscolumns' तालिका है। – LittleBobbyTables

+3

हां, लेकिन यह किस प्रकार के आरडीबीएमएस का उपयोग कर रहे हैं, इस पर निर्भर करेगा - एसक्यूएल एक भाषा है, डेटाबेस उत्पाद नहीं, और यह प्रश्न विशिष्ट उत्पाद पर निर्भर करता है। आप इस जानकारी की जानकारी 'INFORMATION_SCHEMA.COLUMNS' तालिका में पा सकेंगे - यदि आपके आरडीबीएमएस में यह है। – Bridge

उत्तर

255

का उपयोग एसक्यूएल सर्वर:

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_NAME = 'yourTableName' AND 
    COLUMN_NAME = 'yourColumnName' 
+6

केवल तभी यदि आप संबंधित कॉलम नाम नहीं देखना चाहते हैं। यह केवल प्रकारों को वापस करेगा। यदि आप कॉलम नाम देखना चाहते हैं तो टाइप से संबंधित है आपको COLUMN_NAME भी चुनना होगा ... – HackyStack

+2

और यदि आपकी तालिका डिफ़ॉल्ट स्कीमा में नहीं है तो आप 'AND TABLE_SCHEMA =' yourSchema ' – luviktor

+3

के साथ स्थिति बढ़ा सकते हैं बहुत अच्छा है - लेकिन क्या यह कॉलम के प्रकार के लिए सीमा को वापस कर सकता है? यानी 'वर्चर' और 'int' के बजाय 'int (11) 'के बजाय' वर्चर (255) '? – mmcrae

10

TSQL/MSSQL में ऐसा लगता है कि:

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 = '' 
6

आप MySQL उपयोग कर रहे हैं आप

SHOW COLUMNS FROM `tbl_name`; 

SHOW COLUMNS on dev.mysql.com

अन्यथा की कोशिश कर सकते तुम क्या करने में सक्षम होना चाहिए

DESCRIBE `tbl_name`; 
+1

* अन्यथा * आप का अर्थ है अन्य आरडीबीएमएस MySQL से अलग? – Lamak

+2

हां। 'डेस्क्रिब' वाक्यविन्यास ओरेकल में भी मान्य है, हालांकि एमएसएसक्यूएल इस वाक्यविन्यास को स्वीकार नहीं करेगा। – fimas

+0

MSSQL और TSQL पर विधि के लिए @jTC से उत्तर देखें। – fimas

3
USE [YourDatabaseName] 
GO 

SELECT column_name 'Column Name', 
data_type 'Data Type' 
FROM information_schema.columns 
WHERE table_name = 'YourTableName' 
GO 

यह वापस आ जाएगी मूल्यों स्तंभ नाम, आप उन स्तंभों के नाम दिखा, और उन स्तंभों की डेटा प्रकार (ints, varchars, आदि)।

40

TSQL में सबसे आसान तरीका है:

SELECT COLUMN_NAME, DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'yourTableName' 
3

लिए IBM DB2:

SELECT TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA='your_schema_name' AND TABNAME='your_table_name' AND COLNAME='your_column_name' 
6
ओरेकल एसक्यूएल में

आप इस करना होगा:

SELECT 
    DATA_TYPE 
FROM 
    all_tab_columns 
WHERE 
    table_name = 'TABLE NAME' -- in uppercase 
AND column_name = 'COLUMN NAME' -- in uppercase 
1

मेरे मामले में मैं गतिशील एसक्यूएल (कंपकंपी!) के लिए डेटा प्रकार प्राप्त करने के लिए आवश्यक वैसे भी यहां एक समारोह है कि मैं बनाया है कि पूरा डेटा प्रकार रिटर्न है। के बजाय उदाहरण के लौटने के लिए 'दशमलव' यह दशमलव (18,4) वापसी होगी: dbo.GetLiteralDataType

19

एसक्यूएल सर्वर के लिए, इस प्रणाली संग्रहीत प्रक्रिया सभी तालिका जानकारी वापस आ जाएगी, स्तंभ डेटाटाइप्स सहित:

exec sp_help YOURTABLENAME 
+4

मैंने इसे अपरिवर्तित किया है हालांकि यह सही जवाब नहीं है लेकिन मुझे मूल्यवान जानकारी प्रदान करता है। जैसे "IsComputed" जानकारी मुझे सूचना स्कीमा में नहीं मिली लेकिन मैं sp_help प्रक्रिया कोड में पा सकता हूं और वहां से कॉपी कर सकता हूं। – Christoph

+3

दृश्यों पर भी काम करता है, भी ... –

1

TSQL का उपयोग करना तालिका नाम, स्तंभ नाम, डेटा प्रकार, डेटा प्रकार लंबाई, और स्वीकार्य nulls

SELECT TABLE_NAME,COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'your_table_name' 

ओ:/MSSQL

इस क्वेरी आप मिल जाएगा केवल तभी बात यह है कि बदलने की आवश्यकता your_table_name है।

0

TSQL/MSSQL

का उपयोग करते हुए आप INTO कीवर्ड का उपयोग कर सकते हैं।

कोई वास्तविक तालिका में SELECT का परिणाम

उदाहरण: select .... INTO real_table_name

बाद is_nullable स्कीमा, टेबल, कॉलम, प्रकार, MAX_LENGTH प्राप्त करने के लिए इस क्वेरी

sp_help real_table_name 
1

का प्रयोग करें,

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] 
3

एमएस एसक्यूएल का उपयोग कर एक और बदलाव:

SELECT TYPE_NAME(system_type_id) 
FROM sys.columns 
WHERE name = 'column_name' 
AND [object_id] = OBJECT_ID('[dbo].[table_name]'); 
संबंधित मुद्दे