Je cherche à créer un ORM de base (uniquement pour le plaisir) et je me demandais s'il y avait un moyen de retourner la liste des tables dans une base de données ainsi que les champs de chaque table.
En utilisant cela, je veux pouvoir parcourir le jeu de résultats (en C #), puis dire que pour chaque table du jeu de résultats, procédez comme suit (par exemple, utilisez la réflexion pour créer une classe qui contiendra ou contiendra xyz).
De plus, quels sont les bons blogs en ligne pour SQL Server? Je sais que cette question concerne vraiment l'utilisation de SP et de bases de données système dans Sql Server. Les requêtes générales me conviennent, alors certains blogs qui couvrent ce type de fonctionnalités m'intéressent.
Merci
Est-ce ce que vous recherchez:
Utilisation de la vue CATALOGUE D'OBJETS
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';
Utilisation de la vue INFORMATIONS SCHEMA
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;
Référence: Mon blog - http://dbalink.wordpress.com/2008/10/24/querying-the-object-catalog-and-information-schema-views/
Les tables ::
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
colonnes ::
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
ou
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='your_table_name'
Obtenir la liste de toutes les tables et les champs de la base de données:
Select *
From INFORMATION_SCHEMA.COLUMNS
Where TABLE_CATALOG Like 'DatabaseName'
Obtenir la liste de tous les champs de la table:
Select *
From INFORMATION_SCHEMA.COLUMNS
Where TABLE_CATALOG Like 'DatabaseName' And TABLE_NAME Like 'TableName'
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
J'ai testé quelques solutions et trouvé que
Select *
From INFORMATION_SCHEMA.COLUMNS
vous donne les informations de colonne pour votre base de données CURRENT/default.
Select *
From <DBNAME>.INFORMATION_SCHEMA.COLUMNS
, sans les <et>, vous donne les informations de colonne pour la base de données DBNAME.
Votre autre ami intégré ici est le sproc système SP_HELP.
utilisation de l'échantillon ::
sp_help <MyTableName>
Il renvoie beaucoup plus d'informations que vous n'en aurez réellement besoin, mais au moins 90% de vos besoins éventuels seront pris en compte.
Il suffit de jeter ceci - facile à copier/coller dans un document Word ou 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>'
Pour MYSQL:
Select *
From INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = "<DatabaseName>"
Cela vous donnera toutes les tables créées par l'utilisateur:
select * from sysobjects where xtype='U'
Pour obtenir les cols:
Select * from Information_Schema.Columns Where Table_Name = 'Insert Table Name Here'
De plus, je trouve que http://www.sqlservercentral.com/ est une très bonne ressource de base de données.
Cela renverra le nom de la base de données, le nom de la table, le nom de la colonne et le type de données de la colonne spécifiée par un paramètre de base de données:
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
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
oublie tout
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
pour obtenir tous les noms de tables. Essayez-le sur sqlserver,
J'ai trouvé un moyen facile d'extraire les détails des tables et des colonnes d'une base de données particulière à l'aide du développeur SQL.
Select *FROM USER_TAB_COLUMNS