একটি ডাটাবেসে সারণী এবং প্রতিটি ক্ষেত্রে ক্ষেত্রের তালিকা পাওয়া


85

আমি একটি বেসিক ওআরএম তৈরির দিকে তাকিয়ে আছি (নিখুঁতভাবে মজাদার জন্য), এবং ভাবছিলাম, কোনও ডাটাবেসে সারণীর তালিকা এবং প্রতিটি টেবিলের জন্য ক্ষেত্রগুলি ফেরত দেওয়ার কোনও উপায় আছে কি?

এটি ব্যবহার করে, আমি ফলাফল সেট (সি # তে) এর মধ্য দিয়ে লুপ করতে সক্ষম হতে চাই এবং তারপরে ফলাফল সেটে প্রতিটি টেবিলের জন্য বলি, এটি করুন (যেমন কোনও ক্লাস তৈরির প্রতিচ্ছবি ব্যবহার করুন যা এক্সওয়াইজ করবে বা থাকবে))

এর বাইরেও এসকিউএল সার্ভারের জন্য কয়েকটি ভাল অনলাইন ব্লগ কী? আমি জানি এই প্রশ্নটি আসলে এসকিএল সার্ভারে সিস্টেম এসপি এবং ডাটাবেসগুলি ব্যবহার করার বিষয়ে, এবং আমি সাধারণ প্রশ্নের সাথে ঠিক আছি, তাই আমি এই জাতীয় ক্রিয়াকলাপটি কভার করে এমন কিছু ব্লগে আগ্রহী।

ধন্যবাদ


পুনরায়; এসকিউএল সার্ভার ব্লগ তালিকা - আমার ব্লগে এই এন্ট্রিটি একবার দেখুন: dbalink.wordpress.com/2009/01/07/…
মারলনআরবুনাল

সম্পর্কিত ডুপ প্রশ্নটি দেখুন: স্ট্যাকওভারফ্লো / প্রশ্ন / ১1৫৪15/…
রায়

4
ধন্যবাদ টাস্কটি সি # দিয়ে ডোন করা যায়।
গুরুদীপ

উত্তর:


173

আপনি যেটা খুঁজছিলেন এটাই কি সেটা:

OBJECT ক্যাটালগ ভিউগুলি ব্যবহার করা

 SELECT T.name AS Table_Name ,
       C.name AS Column_Name ,
       P.name AS Data_Type ,
       P.max_length AS Size ,
       CAST(P.precision AS VARCHAR) + '/' + CAST(P.scale AS VARCHAR) AS Precision_Scale
FROM   sys.objects AS T
       JOIN sys.columns AS C ON T.object_id = C.object_id
       JOIN sys.types AS P ON C.system_type_id = P.system_type_id
WHERE  T.type_desc = 'USER_TABLE';

তথ্য স্কিম ভিউ ব্যবহার করে

  SELECT TABLE_SCHEMA ,
       TABLE_NAME ,
       COLUMN_NAME ,
       ORDINAL_POSITION ,
       COLUMN_DEFAULT ,
       DATA_TYPE ,
       CHARACTER_MAXIMUM_LENGTH ,
       NUMERIC_PRECISION ,
       NUMERIC_PRECISION_RADIX ,
       NUMERIC_SCALE ,
       DATETIME_PRECISION
FROM   INFORMATION_SCHEMA.COLUMNS;

তথ্যসূত্র: আমার ব্লগ - http://dbalink.wordpress.com/2008/10/24/querying-the-object-catolog-and-information-schema-views/


7
প্রথম ক্যোয়ারী সর্বদা চরের জন্য সর্বোচ্চ দৈর্ঘ্য = 8000 ফেরত দেয় যা ভুল। দ্বিতীয় ক্যোয়ারীটি সঠিক এবং আরও বিশদ
স্মার্কম্যান

4
উভয় জিজ্ঞাসা বিভিন্ন সংখ্যক সারিতে ফিরে আসে: /
গোরভগাইল

INFORMATION_SCHEMAপদ্ধতির একটি সুবিধা হ'ল এটি বিভিন্ন ডেটাবেস জুড়ে যথেষ্ট বহনযোগ্য।
j_random_hacker

এটা কি টাইপো? আমি ব্যবহার করতাম C.max_length AS Size ,- অন্যথায় আপনি @ স্মার্কম্যানের উল্লেখ অনুসারে সর্বোচ্চ দৈর্ঘ্য = 8000 দিয়ে শেষ করবেন।
এমবিএক্স

আমি দেখতে পেলাম যে 1 ম ক্যোয়ারি স্কিমাগুলি তালিকাভুক্ত করে না এবং অনেকগুলি সারি (সদৃশ) প্রদান করে এবং দ্বিতীয় কোয়েরিতে সারিগুলির সঠিক সংখ্যাটি ফিরছে। সুতরাং 2 য় ক্যোয়ারীটি হ'ল ব্যবহার করা।
গ্যারি ব্যারেট 11

36

টেবিল ::

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

কলাম ::

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

বা

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='your_table_name'

8
INFORMATION_SCHEMA সম্পর্কে দুর্দান্ত জিনিসটি হ'ল এটি একটি আইএসও জিনিস, কেবল একটি স্কুয়েল সার্ভার জিনিস নয়। একই কোড সব অনুবর্তী ডাটাবেস জন্য কাজ করবে
Cindi

এটি খুব দরকারী ... তবে উপরের অভিব্যক্তিতে ডাটাবেসের নাম কীভাবে অন্তর্ভুক্ত করা যায়? অগ্রিম ধন্যবাদ ..
অমিত ভার্মা

@ অমিতওয়ারমা USE <your DB name>; SELECT * FROM INFORMATION_SCHEMA.COLUMNS (কমপক্ষে এমএস এসকিউএল সিনট্যাক্স)
ক্রিস ও

12

ডাটাবেসে সমস্ত সারণী এবং ক্ষেত্রগুলির তালিকা পান:

Select *
From INFORMATION_SCHEMA.COLUMNS
Where TABLE_CATALOG Like 'DatabaseName'

সারণীতে সমস্ত ক্ষেত্রের তালিকা পান:

Select *
From INFORMATION_SCHEMA.COLUMNS
Where TABLE_CATALOG Like 'DatabaseName' And TABLE_NAME Like 'TableName' 

INFORMATION_SCHEMAপদ্ধতির একটি সুবিধা হ'ল এটি বিভিন্ন ডেটাবেস জুড়ে যথেষ্ট বহনযোগ্য।
j_random_hacker


7

আমি কয়েকটি সমাধান পরীক্ষা করে দেখেছি যে এটি

Select *
From INFORMATION_SCHEMA.COLUMNS

আপনাকে আপনার বর্তমান / ডিফল্ট ডাটাবেসের জন্য কলামের তথ্য দেয়।

Select *
From <DBNAME>.INFORMATION_SCHEMA.COLUMNS

, <এবং> ব্যতীত আপনাকে DBNAME ডাটাবেসটির কলামের তথ্য দেয়।


3

আপনার অন্য অন্তর্নির্মিত বন্ধু হ'ল সিস্টেম স্প্রোক এসপিএইচএলপি।

নমুনা ব্যবহার ::

sp_help <MyTableName>

এটি আপনার সত্যিকারের প্রয়োজনের তুলনায় অনেক বেশি তথ্য দেয়, তবে আপনার সম্ভাব্য প্রয়োজনীয়তার কমপক্ষে 90% পূরণ করা হবে।


1

এটি কেবল সেখানে ফেলে দেওয়া হচ্ছে - এখন কোনও শব্দ বা গুগল ডক্সে অনুলিপি / আটকানো সহজ:

PRINT '<html><body>'
SET NOCOUNT ON
DECLARE @tableName VARCHAR(30)
DECLARE tableCursor CURSOR LOCAL FAST_FORWARD FOR
    SELECT T.name AS TableName 
      FROM sys.objects AS T
     WHERE T.type_desc = 'USER_TABLE'
     ORDER BY T.name
OPEN tableCursor
FETCH NEXT FROM tableCursor INTO @tableName
WHILE @@FETCH_STATUS = 0 BEGIN
    PRINT '<h2>' + @tableName + '</h2>'
    PRINT '<pre>'
    SELECT LEFT(C.name, 30) AS ColumnName,
           LEFT(ISC.DATA_TYPE, 10) AS DataType,
           C.max_length AS Size,
           CAST(P.precision AS VARCHAR(4)) + '/' + CAST(P.scale AS VARCHAR(4)) AS PrecScale,
           CASE WHEN C.is_nullable = 1 THEN 'Null' ELSE 'No Null' END AS [Nullable],
           LEFT(ISNULL(ISC.COLUMN_DEFAULT, ' '), 5)  AS [Default],
           CASE WHEN C.is_identity = 1 THEN 'Identity' ELSE '' END AS [Identity]
    FROM   sys.objects AS T
           JOIN sys.columns AS C ON T.object_id = C.object_id
           JOIN sys.types AS P ON C.system_type_id = P.system_type_id
           JOIN INFORMATION_SCHEMA.COLUMNS AS ISC ON T.name = ISC.TABLE_NAME AND C.name = ISC.COLUMN_NAME
    WHERE  T.type_desc = 'USER_TABLE'
      AND  T.name = @tableName
    ORDER BY T.name, ISC.ORDINAL_POSITION
    PRINT '</pre>'
    FETCH NEXT FROM tableCursor INTO @tableName

END

CLOSE tableCursor
DEALLOCATE tableCursor
SET NOCOUNT OFF
PRINT '</body></html>'

0

এটি আপনাকে ব্যবহারকারীর দ্বারা তৈরি সমস্ত সারণী পাবেন:

select * from sysobjects where xtype='U'

কলস পেতে:

Select * from Information_Schema.Columns Where Table_Name = 'Insert Table Name Here'

এছাড়াও, আমি দেখতে পেয়েছি যে http://www.sqlservercentral.com/ একটি খুব ভাল ডিবি সংস্থান হতে।


0

এটি ডাটাবেস প্যারামিটার দ্বারা নির্দিষ্ট কলামের ডাটাবেসের নাম, টেবিলের নাম, কলামের নাম এবং কলামের ডেটাটাইপ ফিরিয়ে দেবে:

declare @database nvarchar(25)
set @database = ''

SELECT cu.table_catalog,cu.VIEW_SCHEMA, cu.VIEW_NAME, cu.TABLE_NAME,   
cu.COLUMN_NAME,c.DATA_TYPE,c.character_maximum_length
from INFORMATION_SCHEMA.VIEW_COLUMN_USAGE as cu
JOIN INFORMATION_SCHEMA.COLUMNS as c
on cu.TABLE_SCHEMA = c.TABLE_SCHEMA and c.TABLE_CATALOG = 
cu.TABLE_CATALOG
and c.TABLE_NAME = cu.TABLE_NAME
and c.COLUMN_NAME = cu.COLUMN_NAME
where cu.TABLE_CATALOG = @database
order by cu.view_name,c.COLUMN_NAME

সমস্ত দর্শনগুলির জন্য , এই সারণির নাম, কলামের নাম, ডেটা ধরণ এবং দর্শন দ্বারা প্রত্যাবর্তিত প্রতিটি কলামের দৈর্ঘ্য তালিকাভুক্ত করে। এটি প্রশ্নের উত্তর দেয় না তবে এটি একটি ঝরঝরে ক্যোয়ারী।
বেন

0

এসকিউএল বিকাশকারীকে ব্যবহার করে কোনও নির্দিষ্ট ডিবির টেবিল এবং কলামগুলির বিশদ আনার সহজ উপায় আমি পেয়েছি।

Select *FROM USER_TAB_COLUMNS

0

SELECT * FROM INFORMATION_SCHEMA.COLUMNS সব ভুলে যাও

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNSসমস্ত টেবিলের নাম পেতে। স্কেলসার্ভারে এটি ব্যবহার করে দেখুন


0

MYSQL এর জন্য:

Select *
From INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = "<DatabaseName>"

TABLE_SCHEMAডাটাবেসের নাম নয়, এটির স্কিমার নাম (যেমন dbo)। TABLE_CATALOGডাটাবেসের নাম।
ডিডফি

TABLE_SCHEMA: স্কিমা (ডাটাবেস) এর নাম যা টেবিলের অন্তর্ভুক্ত। TABLE_CATALOG: টেবিলের অন্তর্ভুক্ত ক্যাটালগের নাম।
জ্যোতিরঞ্জন

mysql এ। এমএসকিউএল নয় আমাকে ভুল করবেন না, আমি বলছি না যে আপনার উত্তরটি ভুল ছিল। এটি সঠিক, কেবল এমএসকিএল-এর জন্য নয়। আমি বিশ্বাস করি যে তারা উভয় ক্ষেত্রেই স্কিমার আলাদা আচরণ করে।
ডিডফি

-1

একটি মাইক্রোসফ্ট এসকিউএল সার্ভারে আপনি এটি ব্যবহার করতে পারেন:

declare @sql2 nvarchar(2000)
        set @sql2  ='
use ?
if (  db_name(db_id()) not in (''master'',''tempdb'',''model'',''msdb'',''SSISDB'')  )
begin   

select
    db_name() as db,
    SS.name as schemaname,
    SO.name tablename,
    SC.name columnname,
    ST.name type,
    case when ST.name in (''nvarchar'', ''nchar'')
        then convert(varchar(10), ( SC.max_length / 2 ))
        when ST.name in (''char'', ''varchar'')
        then convert(varchar(10), SC.max_length)
        else null
    end as length,
    case when SC.is_nullable = 0 then ''No'' when SC.is_nullable = 1 then ''Yes'' else null end as nullable,
    isnull(SC.column_id,0) as col_number
from sys.objects                  SO
join sys.schemas                  SS
    on SS.schema_id = SO.schema_id
join sys.columns             SC
on SO.object_id     = SC.object_id
left join sys.types               ST
    on SC.user_type_id = ST.user_type_id and SC.system_type_id = ST.system_type_id
    where SO.is_ms_shipped = 0 
end
'

exec sp_msforeachdb @command1 = @sql2

এটি আপনাকে সমস্ত ব্যবহারকারীর সংজ্ঞায়িত ডাটাবেস থেকে সমস্ত সারণী এবং কলাম (এবং তাদের সংজ্ঞা) দেখায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.