Получение списка таблиц и полей в каждой, в базе данных - PullRequest
65 голосов
/ 07 января 2009

Я смотрю на создание базового ORM (просто для удовольствия), и мне было интересно, есть ли способ вернуть список таблиц в базе данных, а также поля для каждой таблицы?

Используя это, я хочу иметь возможность циклически просматривать набор результатов (в C #) и затем говорить для каждой таблицы в наборе результатов, сделать это (например, использовать отражение, чтобы создать класс, который будет выполнять или содержать xyz).

В дополнение к этому, какие есть хорошие онлайн-блоги для SQL Server? Я знаю, что этот вопрос на самом деле касается использования системных SP и баз данных в Sql Server, и я в порядке с общими запросами, поэтому мне интересны некоторые блоги, в которых описывается такая функциональность.

Спасибо

Ответы [ 12 ]

143 голосов
/ 07 января 2009

Это то, что вы ищете:

Использование КАТАЛОГОВ ОБЪЕКТОВ

 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/

33 голосов
/ 07 января 2009

Таблицы ::

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'
12 голосов
/ 01 ноября 2012

Получить список всех таблиц и полей в базе данных:

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' 
8 голосов
/ 07 января 2009
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
6 голосов
/ 24 октября 2016

Я протестировал несколько решений и нашел, что

Select *
From INFORMATION_SCHEMA.COLUMNS

дает вам информацию о столбце для вашей текущей / базы данных по умолчанию.

Select *
From <DBNAME>.INFORMATION_SCHEMA.COLUMNS

без <и> дает информацию о столбце для базы данных DBNAME.

4 голосов
/ 07 января 2009

Ваш второй встроенный друг - системный sproc SP_HELP.

пример использования ::

sp_help <MyTableName>

Он возвращает гораздо больше информации, чем вам действительно нужно, но по крайней мере 90% ваших возможных требований будут учтены.

2 голосов
/ 12 сентября 2017

Просто добавьте это - просто скопируйте / вставьте в слово или документ Google:

<code>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 '
ПОЛУЧИТЬ СЛЕДУЮЩИЙ ИЗ tableCursor INTO @tableName КОНЕЦ ЗАКРЫТЬ tableCursor DEALLOCATE tableCursor ВЫКЛЮЧИТЬ ПЕЧАТЬ ''
1 голос
/ 03 января 2018

Для MYSQL:

Select *
From INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = "<DatabaseName>"
1 голос
/ 07 января 2009

Это даст вам все созданные пользователем таблицы:

select * from sysobjects where xtype='U'

Чтобы получить cols:

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

Кроме того, я считаю http://www.sqlservercentral.com/ довольно хорошим ресурсом базы данных.

0 голосов
/ 02 марта 2018

SELECT * FROM INFORMATION_SCHEMA.COLUMNS для получения всех

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS для получения всех имен таблиц. Попробуйте это на sqlserver,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...