কলামের ধরণ পেতে এসকিউএল স্টেটমেন্ট


301

এমন কোনও এসকিউএল বিবৃতি আছে যা কোনও টেবিলের কলামের ধরণটি ফেরত দিতে পারে?


5
আরডিবিএমএস উপর নির্ভর করে; এসকিউএল সার্ভারের sys.syscolumnsউদাহরণ রয়েছে।
লিটলববি টেবিলস - এউ প্রত্যাহার করুন

3
হ্যাঁ, তবে আপনি কী ধরণের আরডিবিএমএস ব্যবহার করছেন তার উপর নির্ভর করে এটি আলাদা হবে - এসকিউএল একটি ভাষা, ডাটাবেস পণ্য নয় এবং এই প্রশ্নটি নির্দিষ্ট পণ্যের উপর নির্ভর করে। আপনি INFORMATION_SCHEMA.COLUMNSটেবিলে এই ধরণের তথ্য সন্ধান করতে পারবেন - যদি আপনার আরডিবিএমএস থাকে।
সেতু

উত্তর:


460

এসকিউএল সার্ভার ব্যবহার করে:

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

11
কেবলমাত্র যদি আপনি সংশ্লিষ্ট কলামের নামটি দেখতে না চান। এটি কেবল প্রকারগুলিই ফিরিয়ে দেবে। আপনি যদি কলামের নামটি টাইপটি দেখতে চান তবে
এটির

5
এবং যদি আপনার টেবিলটি ডিফল্ট স্কিমাতে না থাকে তবে আপনি শর্তটি বাড়িয়ে দিতে পারেনAND TABLE_SCHEMA = 'yourSchema'
luviktor

8
এটি দুর্দান্ত - তবে এটি কি কলামের ধরণের সীমাটি ফিরিয়ে আনা সম্ভব? অর্থাৎ varchar(255)পরিবর্তে varcharএবং int(11)পরিবর্তে int?
ডন চ্যাডল

13
@mmcrae: এটা কলাম ব্যবহার করে সম্ভব CHARACTER_MAXIMUM_LENGTHমধ্যে INFORMATION_SCHEMA.COLUMNSSELECT * FROM INFORMATION_SCHEMA.COLUMNSউপলব্ধ সমস্ত কলাম উপলব্ধ করতে কেবল একটি করুন ।
ফ্রান্সিস পি

2
অস্থায়ী টেবিলের কী হবে?
ইলিয়া গাজমান

77

টিএসকিউএলের সহজতম উপায় হ'ল:

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

44

এসকিউএল সার্ভারের জন্য, এই সিস্টেমের সঞ্চিত পদ্ধতিটি কলামের ডেটাটাইপগুলি সহ সমস্ত সারণী তথ্য ফিরিয়ে দেবে:

exec sp_help YOURTABLENAME

5
আমি এটিকে উত্সাহিত করেছি যদিও এটি উত্তোলনের উত্তম নয় তবে আমার কাছে মূল্যবান তথ্য সরবরাহ করে। উদাহরণস্বরূপ "ইস্কম্পিউটেড" তথ্যটি আমি তথ্য স্কিমাতে পাইনি তবে আমি এসপি_হেল্প পদ্ধতি কোড এবং সেখান থেকে অনুলিপি পেতে পারি।
ক্রিস্টোফ

2
টেবিলের নাম নির্বাচন করুন এবং ক্লিক করুন Alt+F1.. একই ফলাফল দেয়।
পুগাল

স্পষ্ট করতে: টেবিল বা প্রদর্শনের নামটি সম্পাদকে নির্বাচন করতে হবে এবং তারপরে টিপুন Alt+F1। সমাধান অবজেক্ট এক্সপ্লোরারে নেই। এটি যেমন একটি সহায়ক বৈশিষ্ট্য
বাগিবাণী

18

টিএসকিউএল / এমএসএসকিউএলে দেখে মনে হচ্ছে:

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

2
আসলে এটি JOIN sys.types y ON y.user_type_id = c.user_type_id system_type_id অনন্য নয়। sys.colums ডক
ফ্যাব্রিকিও

12

ওরাকল এসকিউএল এ আপনি এটি করতে হবে:

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

9

আপনি যদি মাইএসকিউএল ব্যবহার করেন তবে আপনি চেষ্টা করতে পারেন

SHOW COLUMNS FROM `tbl_name`;

Dev.mysql.com এ কলম্বস দেখান

অন্যথায় আপনি করতে সক্ষম হওয়া উচিত

DESCRIBE `tbl_name`;

1
সঙ্গে অন্যথায় আপনি অন্য RDBMS পৃথক্ মাইএসকিউএল থেকে মানে?
লামাক

2
হ্যাঁ. DESCRIBEসিনট্যাক্স পাশাপাশি Oracle এ বৈধ, তবে এমএস স্কুয়েল এই সিনট্যাক্স গ্রহণ করবে না।
fimas

এমএসএসকিউএল এবং টিএসকিউএল সম্পর্কিত পদ্ধতির জন্য @jTC থেকে উত্তর দেখুন।
fimas

মাইএসকিউএল এর নতুন সংস্করণ আছে information_schema.COLUMNS
রিক জেমস

আমি 3 বা 4 কলামযুক্ত ছোট টেবিলের জন্য DESC বা DESCRIBE (আপনি যে ডিবিএমএস ব্যবহার করেন তার উপর নির্ভর করে) দরকারী বলে মনে করি তারপরে এটি কলামের নাম সহ নমনীয় পতাকা এবং বড় টেবিলের জন্য কলামের ধরণের টেবিলের কাঠামো দেখায় তবে ফলাফল ফিরে আসতে আরও সময় লাগে এবং এটি আপনার প্রয়োজনীয় তথ্য খুঁজে পাওয়া শক্ত।
বেগ


4

টিএসকিউএল / এমএসএসকিউএল ব্যবহার করা

এই ক্যোয়ারীটি আপনাকে পাবেন: টেবিলের নাম, কলামের নাম, ডেটা টাইপ, ডেটা টাইপ দৈর্ঘ্য এবং অনুমোদিত নালাগুলি

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

কেবলমাত্র যেটি পরিবর্তন করতে হবে তা হ'ল আপনার_সারণযোগ্য_নাম।


3
USE [YourDatabaseName]
GO

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

এটি কলামের নামগুলি, কলামগুলির নাম এবং সেই কলামগুলির ডেটা প্রকারগুলি (ইনটস, ভারচারার ইত্যাদি) দেখায় return



3

উপরের উত্তরগুলি তৈরি করতে, আপনার কলামগুলি ডিক্লেয়ার করতে হবে একই ফর্ম্যাটটিতে কলামের ডেটা টাইপ পেতে প্রায়শই দরকারী।

উদাহরণস্বরূপ, , 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'

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত ছিল। ধন্যবাদ, সম্ভবত আপনি শর্তটি যুক্ত করতে পারেন (t.type = 'U') - সিস্টেমের টেবিলটি সরিয়ে ফেলুন
আইয়ানিক

2

প্রকৃত ঘোষিত ডেটা প্রকারগুলি পুনরুদ্ধার করতে উদাহরণস্বরূপ, ডায়নামিক এসকিউএল এ 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

1

আমার ক্ষেত্রে আমার ডাইনামিক এসকিউএল (শুড্ডার!) এর জন্য ডেটা টাইপ পাওয়ার দরকার ছিল এখানে একটি ফাংশন যা আমি তৈরি করেছি যা সম্পূর্ণ ডেটা টাইপ ফেরত দেয়। উদাহরণস্বরূপ, 'দশমিক' ফেরতের পরিবর্তে এটি ডেসিমাল (18,4) ফেরত আসবে: dbo.GetLiteralDataType


1

টিএসকিউএল / এমএসএসকিউএল ব্যবহার করা

আপনি INTOকীওয়ার্ডটি ব্যবহার করতে পারেন ।

ফলে SELECTএকটি বাস্তব টেবিলের মধ্যে

উদাহরণ: select .... INTO real_table_name

পরে

sp_help real_table_name

1

স্কিমা, টেবিল, কলাম, প্রকার, সর্বাধিক দৈর্ঘ্য, 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]




0

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")))

'এবং নমুনা (ভালআরএস হ'ল আরএস.ফিল্ডের জন্য আমার ফাংশন ("CHARACTER_MAXIMUM_LENGTH") value মান):

 RT_Charactar_Maximum_Length = (ValRS(Rs, "CHARACTER_MAXIMUM_LENGTH"))
        rt_Tipo = (ValRS(Rs, "DATA_TYPE"))

0

যেহেতু কিছু লোক ডেটা টাইপের সাথে যথাযথতার জন্য জিজ্ঞাসা করছিল, তাই আমি আমার স্ক্রিপ্টটি ভাগ করতে চাই যা আমি এই জাতীয় উদ্দেশ্যে তৈরি করেছি।

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


-1

এমএস এসকিউএল-এর আর একটি বিকল্প হ'ল selectক্যোয়ারীটি এখানে যে প্রশ্নের জন্য আপনি টাইপ করতে চান তা প্রতিস্থাপন করুন :

declare @sql varchar(4000);

set @sql = 'select ''hi'' as greeting';

select * from master.sys.dm_exec_describe_first_result_set (@sql, Null, 0);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.