Obtendo lista de tabelas e campos em cada, em um database

Eu estou olhando para criar um ORM básico (puramente por diversão), e queria saber, existe uma maneira de retornar a lista de tabelas em um database e também os campos para cada tabela?

Usando isso, eu quero ser capaz de percorrer o conjunto de resultados (em C #) e, em seguida, dizer para cada tabela no conjunto de resultados, fazer isso (por exemplo, usar reflection para fazer uma class que faça ou contenha xyz).

Além disso, quais são alguns bons blogs online para o SQL Server? Eu sei que esta pergunta é realmente sobre o uso de SPs do sistema e bancos de dados no Sql Server, e estou bem com as consultas gerais, por isso estou interessado em alguns blogs que cobrem esse tipo de funcionalidade.

obrigado

É isso que você está procurando:

Usando visões de catálogo de 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'; 

Usando VISÕES DE ESQUEMA DA INFORMAÇÃO

  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; 

Referência: My Blog – http://dbalink.wordpress.com/2008/10/24/querying-the-object-catalog-and-information-schema-views/

Tabelas ::

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

colunas ::

 SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

ou

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

Obter lista de todas as tabelas e os campos no database:

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

Obter lista de todos os campos da tabela:

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

Eu testei algumas soluções e descobri que

 Select * From INFORMATION_SCHEMA.COLUMNS 

fornece as informações da coluna para seu database CURRENT / default.

 Select * From .INFORMATION_SCHEMA.COLUMNS 

, sem o , fornece as informações da coluna para o database DBNAME.

Seu outro amigo interno aqui é o sproc do sistema SP_HELP.

amostra de uso ::

 sp_help  

Ele retorna muito mais informações do que você realmente precisa, mas pelo menos 90% de suas possíveis necessidades serão atendidas.

Apenas jogando isso lá fora – fácil de copiar / colar em uma palavra ou no google doc:

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

' + @tableName + '

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

' FETCH NEXT FROM tableCursor INTO @tableName END CLOSE tableCursor DEALLOCATE tableCursor SET NOCOUNT OFF PRINT ''

Isso fará com que você tenha todas as tabelas criadas pelo usuário:

 select * from sysobjects where xtype='U' 

Para obter os cols:

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

Além disso, acho http://www.sqlservercentral.com/ para ser um bom recurso db.

 Select * From INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = "" 

Eu encontrei uma maneira fácil de buscar os detalhes de tabelas e colunas de um determinado database usando o desenvolvedor SQL.

 Select *FROM USER_TAB_COLUMNS 

SELECT * FROM INFORMATION_SCHEMA.COLUMNS para obter todos

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS para obter todos os nomes da tabela. Experimente no sqlserver,

Isso retornará o nome do database, o nome da tabela, o nome da coluna e o tipo de dados da coluna especificada por um parâmetro do database:

 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