it-swarm.com.de

Abrufen einer Liste von Tabellen und Feldern in einer Datenbank

Ich möchte ein einfaches ORM erstellen (nur zum Spaß) und habe mich gefragt, ob es eine Möglichkeit gibt, die Liste der Tabellen in einer Datenbank und auch die Felder für jede Tabelle zurückzugeben.

Auf diese Weise möchte ich in der Lage sein, die Ergebnismenge (in C #) zu durchlaufen und dann für jede Tabelle in der Ergebnismenge Folgendes zu sagen (z. B. mithilfe von Reflection eine Klasse zu erstellen, die xyz enthält oder kann).

Was sind darüber hinaus einige gute Online-Blogs für SQL Server? Ich weiß, dass es bei dieser Frage wirklich um die Verwendung von System-SPs und -Datenbanken in SQL Server geht, und ich bin mit allgemeinen Fragen einverstanden. Ich interessiere mich daher für einige Blogs, die diese Art von Funktionalität behandeln.

Vielen Dank

71
GurdeepS

Suchst du danach:

Verwenden von OBJEKTKATALOGANSICHTEN

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

Verwenden von INFORMATIONSSCHEMAANSICHTEN

  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;

Verweis: Mein Blog - http://dbalink.wordpress.com/2008/10/24/querying-the-object-catalog-and-information-schema-views/

151
MarlonRibunal

Tabellen ::

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

säulen ::

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

oder

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

Liste aller Tabellen und Felder in der Datenbank abrufen:

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

Liste aller Felder in der Tabelle abrufen:

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

Ich habe ein paar Lösungen getestet und festgestellt, dass

Select *
From INFORMATION_SCHEMA.COLUMNS

gibt Ihnen die Spalteninformationen für Ihre CURRENT/Standarddatenbank.

Select *
From <DBNAME>.INFORMATION_SCHEMA.COLUMNS

Ohne <und> erhalten Sie die Spalteninformationen für die Datenbank DBNAME.

7
Jie

Ihr anderer eingebauter Freund hier ist der System-Sproc SP_HELP.

beispielnutzung ::

sp_help <MyTableName>

Es gibt viel mehr Informationen zurück, als Sie wirklich benötigen, aber mindestens 90% Ihrer möglichen Anforderungen werden erfüllt.

4
ZombieSheep

Wirf das einfach raus - einfach in ein Word- oder Google-Dokument kopieren/einfügen:

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>'
2
Manni Marquesa

Für MYSQL:

Select *
From INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = "<DatabaseName>"
1
Jyotiranjan

Dadurch erhalten Sie alle vom Benutzer erstellten Tabellen:

select * from sysobjects where xtype='U'

Um die Cols zu bekommen:

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

Außerdem finde ich http://www.sqlservercentral.com/ eine ziemlich gute Datenbankressource.

1
brendan

Dadurch werden der Datenbankname, der Tabellenname, der Spaltenname und der Datentyp der durch einen Datenbankparameter angegebenen Spalte zurückgegeben:

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
0
Tony Gallone

SELECT * FROM INFORMATION_SCHEMA.COLUMNS Vergiss alles

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS für alle Tabellennamen abrufen. Probieren Sie es auf Sqlserver,

0
nafaa jamel

Ich habe mit SQL Developer eine einfache Möglichkeit gefunden, die Details von Tabellen und Spalten einer bestimmten Datenbank abzurufen.

Select *FROM USER_TAB_COLUMNS
0
Sampath Kumar S