[sql] 데이터베이스에서 각각의 테이블 및 필드 목록 가져 오기

기본 ORM (순전히 재미를 위해)을 만드는 방법을 찾고 있는데 데이터베이스의 테이블 목록과 모든 테이블의 필드를 반환하는 방법이 있습니까?

이것을 사용하여 결과 집합 (C #)을 반복 한 다음 결과 집합의 각 테이블에 대해 이렇게 말할 수 있기를 원합니다 (예 : 리플렉션을 사용하여 xyz를 수행하거나 포함 할 클래스를 만듭니다).

또한 SQL Server에 대한 좋은 온라인 블로그는 무엇입니까? 이 질문은 실제로 Sql Server에서 시스템 SP와 데이터베이스를 사용하는 것에 관한 것이라는 것을 알고 있으며 일반적인 쿼리에 문제가 없으므로 이러한 종류의 기능을 다루는 블로그에 관심이 있습니다.

감사



답변

이것이 당신이 찾고있는 것입니까?

OBJECT CATALOG VIEWS 사용

 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-catalog-and-information-schema-views/


답변

테이블 ::

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'


답변

데이터베이스의 모든 테이블 및 필드 목록을 가져옵니다.

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'


답변

SELECT * FROM INFORMATION_SCHEMA.COLUMNS


답변

몇 가지 솔루션을 테스트 한 결과

Select *
From INFORMATION_SCHEMA.COLUMNS

CURRENT / 기본 데이터베이스에 대한 열 정보를 제공합니다.

Select *
From <DBNAME>.INFORMATION_SCHEMA.COLUMNS

, <및>없이 DBNAME 데이터베이스에 대한 열 정보를 제공합니다.


답변

다른 내장 친구는 시스템 sproc SP_HELP입니다.

샘플 사용 ::

sp_help <MyTableName>

실제로 필요한 것보다 훨씬 더 많은 정보를 반환하지만 가능한 요구 사항의 90 % 이상이 충족 될 것입니다.


답변

그냥 던져 버리면됩니다-이제 쉽게 복사 / 붙여 넣기를 단어 나 Google 문서에 넣을 수 있습니다.

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