Zastanawiam się nad stworzeniem podstawowego ORM (wyłącznie dla zabawy) i zastanawiałem się, czy istnieje sposób na zwrócenie listy tabel w bazie danych, a także pól dla każdej tabeli?
Korzystając z tego, chcę mieć możliwość przechodzenia przez zestaw wyników (w C #), a następnie powiedzieć dla każdej tabeli w zestawie wyników, zrób to (np. Użyj refleksji, aby utworzyć klasę, która będzie zawierać lub zawierać xyz).
Co więcej, jakie są dobre blogi online dotyczące SQL Server? Wiem, że to pytanie tak naprawdę dotyczy używania systemowych SP i baz danych w Sql Server i zgadzam się z ogólnymi zapytaniami, więc jestem zainteresowany niektórymi blogami, które obejmują tego rodzaju funkcje.
Dzięki
Odpowiedzi:
Czy tego szukasz:
Korzystanie z WIDOKÓW KATALOGU OBIEKTÓW
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';
Korzystanie z WIDOKÓW SCHEMATÓW INFORMACJI
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ódła: My Blog - http://dbalink.wordpress.com/2008/10/24/querying-the-object-catalog-and-information-schema-views/
źródło
INFORMATION_SCHEMA
podejścia jest to, że można je przenosić w różnych bazach danych.C.max_length AS Size ,
- inaczej chcesz skończyć z MAXLENGTH = 8000 jak @smirkingman wymienione.Tabele:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
kolumny:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
lub
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='your_table_name'
źródło
USE <your DB name>; SELECT * FROM INFORMATION_SCHEMA.COLUMNS
(przynajmniej składnia MS SQL)Pobierz listę wszystkich tabel i pól w bazie danych:
Select * From INFORMATION_SCHEMA.COLUMNS Where TABLE_CATALOG Like 'DatabaseName'
Pobierz listę wszystkich pól w tabeli:
Select * From INFORMATION_SCHEMA.COLUMNS Where TABLE_CATALOG Like 'DatabaseName' And TABLE_NAME Like 'TableName'
źródło
INFORMATION_SCHEMA
podejścia jest to, że można je przenosić w różnych bazach danych.SELECT * FROM INFORMATION_SCHEMA.COLUMNS
źródło
Przetestowałem kilka rozwiązań i stwierdziłem, że
Select * From INFORMATION_SCHEMA.COLUMNS
podaje informacje o kolumnie dla aktualnej / domyślnej bazy danych.
Select * From <DBNAME>.INFORMATION_SCHEMA.COLUMNS
, bez <i>, podaje informacje o kolumnie bazy danych DBNAME.
źródło
Twój inny wbudowany przyjaciel to system sproc SP_HELP.
przykładowe użycie:
Zwraca o wiele więcej informacji, niż naprawdę będziesz potrzebować, ale co najmniej 90% Twoich możliwych wymagań zostanie zaspokojonych.
źródło
Po prostu to wyrzucam - teraz łatwo skopiuj / wklej do słowa lub dokumentu 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>'
źródło
W ten sposób otrzymasz wszystkie tabele utworzone przez użytkownika:
select * from sysobjects where xtype='U'
Aby zdobyć cols:
Select * from Information_Schema.Columns Where Table_Name = 'Insert Table Name Here'
Uważam również, że http://www.sqlservercentral.com/ jest całkiem niezłym źródłem bazy danych.
źródło
To zwróci nazwę bazy danych, nazwę tabeli, nazwę kolumny i typ danych kolumny określonej przez parametr bazy danych:
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
źródło
Znalazłem łatwy sposób na pobranie szczegółów tabel i kolumn określonej bazy danych za pomocą programisty SQL.
Select *FROM USER_TAB_COLUMNS
źródło
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
zapomnieć wszystkoSELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
aby uzyskać całą nazwę tabeli. Wypróbuj na sqlserver,źródło
W przypadku MYSQL:
Select * From INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = "<DatabaseName>"
źródło
TABLE_SCHEMA
nie jest nazwą bazy danych, jest to nazwa schematu (tjdbo
.).TABLE_CATALOG
to nazwa bazy danych.w Microsoft SQL Server możesz użyć tego:
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
to pokazuje wszystkie tabele i kolumny (oraz ich definicje) ze wszystkich baz danych zdefiniowanych przez użytkownika.
źródło