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. Reflektion verwenden, um eine Klasse zu erstellen, die xyz ausführt oder enthält).
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. Daher interessiere ich mich für einige Blogs, die diese Art von Funktionalität behandeln.
Vielen Dank
Antworten:
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 INFORMATIONSSCHEMA-ANSICHTEN
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;
Referenz: Mein Blog - http://dbalink.wordpress.com/2008/10/24/querying-the-object-catalog-and-information-schema-views/
quelle
INFORMATION_SCHEMA
Ansatzes besteht darin, dass er über verschiedene Datenbanken hinweg ziemlich portabel ist.C.max_length AS Size ,
- sonst würden Sie mit maxlength = 8000 enden, genau wie @smirkingman erwähnt.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'
quelle
USE <your DB name>; SELECT * FROM INFORMATION_SCHEMA.COLUMNS
(mindestens MS SQL-Syntax)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'
quelle
INFORMATION_SCHEMA
Ansatzes besteht darin, dass er über verschiedene Datenbanken hinweg ziemlich portabel ist.SELECT * FROM INFORMATION_SCHEMA.COLUMNS
quelle
Ich habe ein paar Lösungen getestet und festgestellt, dass
Select * From INFORMATION_SCHEMA.COLUMNS
gibt Ihnen die Spalteninformationen für Ihre AKTUELLE / Standarddatenbank.
Select * From <DBNAME>.INFORMATION_SCHEMA.COLUMNS
Ohne <und> erhalten Sie die Spalteninformationen für die Datenbank DBNAME.
quelle
Ihr anderer eingebauter Freund hier ist das System sproc SP_HELP.
Beispielnutzung ::
Es gibt viel mehr Informationen zurück, als Sie wirklich benötigen, aber mindestens 90% Ihrer möglichen Anforderungen werden berücksichtigt.
quelle
Wirf das einfach raus - einfach in ein Wort oder ein 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>'
quelle
Für MYSQL:
Select * From INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = "<DatabaseName>"
quelle
TABLE_SCHEMA
ist nicht der Datenbankname, sondern der Schemaname (dhdbo
).TABLE_CATALOG
ist der Datenbankname.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, dass http://www.sqlservercentral.com/ eine ziemlich gute Datenbankressource ist.
quelle
Dies gibt den Datenbanknamen, den Tabellennamen, den Spaltennamen und den Datentyp der durch einen Datenbankparameter angegebenen Spalte zurück:
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
quelle
Ich habe eine einfache Möglichkeit gefunden, die Details von Tabellen und Spalten einer bestimmten Datenbank mit SQL Developer abzurufen.
Select *FROM USER_TAB_COLUMNS
quelle
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
Vergiss allesSELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
um alle Tabellennamen zu erhalten. Probieren Sie es auf SQL Server aus,quelle
In einem Microsoft SQL Server können Sie Folgendes verwenden:
declare @sql2 nvarchar(2000) set @sql2 =' use ? if ( db_name(db_id()) not in (''master'',''tempdb'',''model'',''msdb'',''SSISDB'') ) begin select db_name() as db, SS.name as schemaname, SO.name tablename, SC.name columnname, ST.name type, case when ST.name in (''nvarchar'', ''nchar'') then convert(varchar(10), ( SC.max_length / 2 )) when ST.name in (''char'', ''varchar'') then convert(varchar(10), SC.max_length) else null end as length, case when SC.is_nullable = 0 then ''No'' when SC.is_nullable = 1 then ''Yes'' else null end as nullable, isnull(SC.column_id,0) as col_number from sys.objects SO join sys.schemas SS on SS.schema_id = SO.schema_id join sys.columns SC on SO.object_id = SC.object_id left join sys.types ST on SC.user_type_id = ST.user_type_id and SC.system_type_id = ST.system_type_id where SO.is_ms_shipped = 0 end ' exec sp_msforeachdb @command1 = @sql2
Dies zeigt Ihnen alle Tabellen und Spalten (und ihre Definition) aus allen benutzerdefinierten Datenbanken.
quelle