क्या कोई SQL कथन है जो किसी तालिका में एक स्तंभ के प्रकार को वापस कर सकता है?
INFORMATION_SCHEMA.COLUMNS
तालिका में इस प्रकार की जानकारी पा सकेंगे - यदि आपका RDBMS है।
क्या कोई SQL कथन है जो किसी तालिका में एक स्तंभ के प्रकार को वापस कर सकता है?
INFORMATION_SCHEMA.COLUMNS
तालिका में इस प्रकार की जानकारी पा सकेंगे - यदि आपका RDBMS है।
जवाबों:
SQL सर्वर का उपयोग करना:
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'yourTableName' AND
COLUMN_NAME = 'yourColumnName'
AND TABLE_SCHEMA = 'yourSchema'
varchar(255)
बजाय varchar
और के int(11)
बजाय int
?
CHARACTER_MAXIMUM_LENGTH
है INFORMATION_SCHEMA.COLUMNS
। बस SELECT * FROM INFORMATION_SCHEMA.COLUMNS
उपलब्ध सभी कॉलम देखने के लिए एक करें।
TSQL में सबसे आसान तरीका है:
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'yourTableName'
SQL सर्वर के लिए, यह सिस्टम संग्रहीत कार्यविधि सभी तालिका जानकारी लौटाएगा, जिसमें स्तंभ डेटाटिप्स भी शामिल हैं:
exec sp_help YOURTABLENAME
Alt+F1
.. समान परिणाम देता है।
Alt+F1
। समाधान ऑब्जेक्ट एक्सप्लोरर में नहीं। यह इस तरह की एक सहायक विशेषता है
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.user_type_id = c.user_type_id
WHERE t.name = ''
JOIN sys.types y ON y.user_type_id = c.user_type_id
system_type_id अद्वितीय नहीं है। sys.columns doc
यदि आप MySQL का उपयोग कर रहे हैं तो आप कोशिश कर सकते हैं
SHOW COLUMNS FROM `tbl_name`;
Dev.mysql.com पर रंगों को दिखाएँ
अन्यथा आपको करने में सक्षम होना चाहिए
DESCRIBE `tbl_name`;
DESCRIBE
वाक्य रचना के साथ-साथ Oracle में मान्य है, लेकिन MSSQL इस वाक्य को स्वीकार नहीं करेगा।
information_schema.COLUMNS
।
MS SQL का उपयोग कर एक और भिन्नता:
SELECT TYPE_NAME(system_type_id)
FROM sys.columns
WHERE name = 'column_name'
AND [object_id] = OBJECT_ID('[dbo].[table_name]');
TSQL / MSSQL का उपयोग करना
यह क्वेरी आपको मिलेगी: तालिका का नाम, स्तंभ का नाम, डेटा प्रकार, डेटा प्रकार की लंबाई, और स्वीकार्य नल
SELECT TABLE_NAME,COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name'
केवल एक चीज जिसे बदलने की आवश्यकता है वह है आपका_अस्तित्व_नाम।
उपरोक्त उत्तरों पर निर्माण करने के लिए, स्तंभ डेटा प्रकार को उसी स्वरूप में प्राप्त करना अक्सर उपयोगी होता है, जिसमें आपको कॉलम घोषित करने की आवश्यकता होती है।
उदाहरण के लिए, , varchar(50)
, ।varchar(max)
decimal(p, s)
यह आपको ऐसा करने की अनुमति देता है:
SELECT
[Name] = c.[name]
, [Type] =
CASE
WHEN 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 / 2 AS 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'
WHEN
पंक्ति में जोड़कर पूरा किया जा सकता है :WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
वास्तविक घोषित डेटा प्रकारों को पुनः प्राप्त करने के लिए, उदाहरण के लिए डायनेमिक SQL में ALTER COLUMNs के उपयोग के लिए, कुछ इस तरह से उपयोग किया जा सकता है:
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE
+ CASE WHEN DATA_TYPE IN ('char','nchar','varchar','nvarchar','binary','varbinary')
AND CHARACTER_MAXIMUM_LENGTH > 0 THEN
COALESCE('('+CONVERT(varchar,CHARACTER_MAXIMUM_LENGTH)+')','')
ELSE '' END
+ CASE WHEN DATA_TYPE IN ('decimal','numeric') THEN
COALESCE('('+CONVERT(varchar,NUMERIC_PRECISION)+','+CONVERT(varchar,NUMERIC_SCALE)+')','')
ELSE '' END
AS Declaration_Type,
CASE WHEN IS_NULLABLE='NO' THEN 'NOT ' ELSE '' END + 'NULL' AS Nullable
FROM INFORMATION_SCHEMA.COLUMNS
ORDER BY 1,2
मेरे मामले में मुझे डायनेमिक SQL (Shudder!) के लिए डेटा प्रकार प्राप्त करने की आवश्यकता थी, वैसे भी यहाँ एक फ़ंक्शन है जो मैंने बनाया है जो पूर्ण डेटा प्रकार लौटाता है। उदाहरण के लिए 'दशमलव' वापस करने के बजाय यह DECIMAL (18,4) लौटाएगा : dbo.GetLiteralDataType
TSQL / MSSQL का उपयोग करना
आप INTO
कीवर्ड का उपयोग कर सकते हैं ।
SELECT
एक वास्तविक तालिका में परिणाम
उदाहरण: select .... INTO real_table_name
उपरांत
sp_help real_table_name
स्कीमा, तालिका, कॉलम, प्रकार, अधिकतम_प्रवाह, 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]
SHOW COLUMNS FROM //table_name// ;
यह आपको तालिका से सभी स्तंभों के बारे में जानकारी देगा।
के लिए स्पार्क एसक्यूएल :
DESCRIBE [db_name.]table_name column_name
के लिए अपाचे डर्बी में दिखाया गया है इस सवाल का जवाब :
select columndatatype from sys.syscolumns
where referenceid = (
select tableid from sys.systables
where tablename = 'YOUR_TABEL_NAME'
and columnname= 'YOUR_COLUMN_NAME')
Vb60 में आप ऐसा कर सकते हैं:
Public Cn As ADODB.Connection
'open connection
Dim Rs As ADODB.Recordset
Set Rs = Cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, UCase("Table"), UCase("field")))
'और नमूना (valRs rs.fields के लिए मेरा कार्य है ("CHARACTER_MAXIMUM_LTHTH")। मान):
RT_Charactar_Maximum_Length = (ValRS(Rs, "CHARACTER_MAXIMUM_LENGTH"))
rt_Tipo = (ValRS(Rs, "DATA_TYPE"))
चूँकि कुछ लोग डेटा प्रकार के साथ सटीक भी पूछ रहे थे, मैं अपनी स्क्रिप्ट को साझा करना चाहूँगा जो मैंने इस तरह के उद्देश्य के लिए बनाई है।
SELECT TABLE_NAME As 'TableName'
COLUMN_NAME As 'ColumnName'
CONCAT(DATA_TYPE, '(', COALESCE(CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, DATETIME_PRECISION, ''), IIF(NUMERIC_SCALE <> 0, CONCAT(', ', NUMERIC_SCALE), ''), ')', IIF(IS_NULLABLE = 'YES', ', null', ', not null')) As 'ColumnType'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE -- ...
ORDER BY 'TableName', 'ColumnName'
यह सही नहीं है, लेकिन यह ज्यादातर मामलों में काम करता है।
का उपयोग करते हुए Sql-Server
MS SQL के लिए एक अन्य विकल्प यह है select
कि आप जिस प्रकार के लिए चाहते हैं, उस क्वेरी को यहां बदलें :
declare @sql varchar(4000);
set @sql = 'select ''hi'' as greeting';
select * from master.sys.dm_exec_describe_first_result_set (@sql, Null, 0);
sys.syscolumns
उदाहरण के लिए तालिका है।