এমন কোনও এসকিউএল বিবৃতি আছে যা কোনও টেবিলের কলামের ধরণটি ফেরত দিতে পারে?
INFORMATION_SCHEMA.COLUMNS
টেবিলে এই ধরণের তথ্য সন্ধান করতে পারবেন - যদি আপনার আরডিবিএমএস থাকে।
এমন কোনও এসকিউএল বিবৃতি আছে যা কোনও টেবিলের কলামের ধরণটি ফেরত দিতে পারে?
INFORMATION_SCHEMA.COLUMNS
টেবিলে এই ধরণের তথ্য সন্ধান করতে পারবেন - যদি আপনার আরডিবিএমএস থাকে।
উত্তর:
এসকিউএল সার্ভার ব্যবহার করে:
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
উপলব্ধ সমস্ত কলাম উপলব্ধ করতে কেবল একটি করুন ।
টিএসকিউএলের সহজতম উপায় হ'ল:
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'yourTableName'
এসকিউএল সার্ভারের জন্য, এই সিস্টেমের সঞ্চিত পদ্ধতিটি কলামের ডেটাটাইপগুলি সহ সমস্ত সারণী তথ্য ফিরিয়ে দেবে:
exec sp_help YOURTABLENAME
Alt+F1
.. একই ফলাফল দেয়।
Alt+F1
। সমাধান অবজেক্ট এক্সপ্লোরারে নেই। এটি যেমন একটি সহায়ক বৈশিষ্ট্য
টিএসকিউএল / এমএসএসকিউএলে দেখে মনে হচ্ছে:
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.colums ডক
আপনি যদি মাইএসকিউএল ব্যবহার করেন তবে আপনি চেষ্টা করতে পারেন
SHOW COLUMNS FROM `tbl_name`;
অন্যথায় আপনি করতে সক্ষম হওয়া উচিত
DESCRIBE `tbl_name`;
DESCRIBE
সিনট্যাক্স পাশাপাশি Oracle এ বৈধ, তবে এমএস স্কুয়েল এই সিনট্যাক্স গ্রহণ করবে না।
information_schema.COLUMNS
।
এমএস এসকিউএল ব্যবহার করে অন্য একটি পরিবর্তন:
SELECT TYPE_NAME(system_type_id)
FROM sys.columns
WHERE name = 'column_name'
AND [object_id] = OBJECT_ID('[dbo].[table_name]');
টিএসকিউএল / এমএসএসকিউএল ব্যবহার করা
এই ক্যোয়ারীটি আপনাকে পাবেন: টেবিলের নাম, কলামের নাম, ডেটা টাইপ, ডেটা টাইপ দৈর্ঘ্য এবং অনুমোদিত নালাগুলি
SELECT TABLE_NAME,COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name'
কেবলমাত্র যেটি পরিবর্তন করতে হবে তা হ'ল আপনার_সারণযোগ্য_নাম।
জন্য আইবিএম DB2 :
SELECT TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA='your_schema_name' AND TABNAME='your_table_name' AND COLNAME='your_column_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'
প্রকৃত ঘোষিত ডেটা প্রকারগুলি পুনরুদ্ধার করতে উদাহরণস্বরূপ, ডায়নামিক এসকিউএল এ 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
আমার ক্ষেত্রে আমার ডাইনামিক এসকিউএল (শুড্ডার!) এর জন্য ডেটা টাইপ পাওয়ার দরকার ছিল এখানে একটি ফাংশন যা আমি তৈরি করেছি যা সম্পূর্ণ ডেটা টাইপ ফেরত দেয়। উদাহরণস্বরূপ, 'দশমিক' ফেরতের পরিবর্তে এটি ডেসিমাল (18,4) ফেরত আসবে: dbo.GetLiteralDataType
টিএসকিউএল / এমএসএসকিউএল ব্যবহার করা
আপনি 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")))
'এবং নমুনা (ভালআরএস হ'ল আরএস.ফিল্ডের জন্য আমার ফাংশন ("CHARACTER_MAXIMUM_LENGTH") value মান):
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
এমএস এসকিউএল-এর আর একটি বিকল্প হ'ল 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
উদাহরণ রয়েছে।