Получение списка таблиц и полей в каждой в базе данных
Я ищу создание базовой ORM (исключительно для удовольствия), и мне было интересно, есть ли способ вернуть список таблиц в базе данных, а также поля для каждой таблицы?
Используя это, я хочу иметь возможность прокручивать результирующий набор (в С#), а затем говорить для каждой таблицы в наборе результатов, делать это (например, использовать отражение, чтобы создать класс, который будет выполнять или содержать xyz).
В дополнение к этому, какие хорошие онлайн-блоги для SQL Server? Я знаю, что этот вопрос действительно касается использования системных SP и баз данных на Sql Server, и я в порядке с общими запросами, поэтому меня интересуют некоторые блоги, которые охватывают такие функции.
Спасибо
Ответы
Ответ 1
Это то, что вы ищете:
Использование 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/
Ответ 2
Таблицы::
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'
Ответ 3
Получить список всех таблиц и полей в базе данных:
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'
Ответ 4
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
Ответ 5
Я проверил несколько решений, найденных, что
Select *
From INFORMATION_SCHEMA.COLUMNS
предоставляет информацию о столбцах для вашей базы данных CURRENT/default.
Select *
From <DBNAME>.INFORMATION_SCHEMA.COLUMNS
без < и > , дает вам информацию о столбцах для базы данных DBNAME.
Ответ 6
Другим встроенным другом здесь является система sproc SP_HELP.
Использование примера::
sp_help <MyTableName>
Он возвращает намного больше информации, чем вам действительно понадобится, но по крайней мере 90% ваших возможных требований будут удовлетворены.
Ответ 7
Просто выбросьте это - теперь легко скопировать/вставить в слово или google doc:
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>'
Ответ 8
Это даст вам все созданные пользователем таблицы:
select * from sysobjects where xtype='U'
Чтобы получить cols:
Select * from Information_Schema.Columns Where Table_Name = 'Insert Table Name Here'
Кроме того, я считаю http://www.sqlservercentral.com/ хорошим ресурсом db.
Ответ 9
Одним из преимуществ подхода INFORMATION_SCHEMA
является то, что он довольно портативен для разных баз данных.
Ответ 10
Я нашел простой способ получить информацию о таблицах и столбцах конкретного БД с помощью разработчика SQL.
Select *FROM USER_TAB_COLUMNS
Ответ 11
Select *
From INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = "<DatabaseName>"
Ответ 12
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
для получения всех
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
для получения всего имени таблицы.
Попробуйте на sqlserver,
Ответ 13
Это вернет имя базы данных, имя таблицы, имя столбца и тип данных столбца, заданного параметром базы данных:
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