Как получить список таблиц, который содержит общее значение столбца в SQL Server. Получить список таблиц sql


sql-server - Как я могу получить список таблиц в хранимой процедуре

Этот код рекурсивно просматривает каждую хранимую процедуру в хранимой процедуре и предоставляет полный список всех используемых таблиц.

declare @sp_name varchar(100) declare @curSpName varchar(100) declare @curObjName varchar(255) declare @curXType varchar(1) ​ create table #tmpTables ( proc_name varchar(255), table_name varchar(255) ) ​ set @sp_name = 'STORED_PROCEDURE_NAME' ​ ;WITH stored_procedures AS ( SELECT o.name AS proc_name, oo.name AS table_name, oo.type AS xType, ROW_NUMBER() OVER(partition by o.name,oo.name, oo.Type ORDER BY o.name,oo.name, oo.Type) AS row FROM sysdepends d INNER JOIN sysobjects o ON o.id=d.id INNER JOIN sysobjects oo ON oo.id=d.depid WHERE o.xtype = 'P' --and oo.type = 'U' --Tables and o.name = @sp_name) SELECT proc_name, table_name, xType, 'N' Processed into ##tmpSP FROM stored_procedures WHERE row = 1 --ORDER BY proc_name,table_name ​ ​ While (Select count(*) from ##tmpSP where Processed = 'N') 0 Begin ​ Select top 1 @curSpName = proc_name, @curObjName = table_name, @curXType = xType from ##tmpSP where Processed = 'N' ​ ​ if @curXType = 'U' Begin ​ insert into #tmpTables values (@curSpName, @curObjName) ​ End ​ if @curXType = 'P' Begin ​ ;WITH stored_procedures AS ( SELECT o.name AS proc_name, oo.name AS table_name, oo.type AS xType, ROW_NUMBER() OVER(partition by o.name,oo.name, oo.Type ORDER BY o.name,oo.name, oo.Type) AS row FROM sysdepends d INNER JOIN sysobjects o ON o.id=d.id INNER JOIN sysobjects oo ON oo.id=d.depid WHERE o.xtype = 'P' and oo.type = 'U' --Tables and o.name = @curObjName) insert into #tmpTables SELECT @curSpName, table_name FROM stored_procedures WHERE row = 1 ORDER BY proc_name,table_name ​ ;WITH stored_procedures AS ( SELECT o.name AS proc_name, oo.name AS table_name, oo.type AS xType, ROW_NUMBER() OVER(partition by o.name,oo.name, oo.Type ORDER BY o.name,oo.name, oo.Type) AS row FROM sysdepends d INNER JOIN sysobjects o ON o.id=d.id INNER JOIN sysobjects oo ON oo.id=d.depid WHERE o.xtype = 'P' and oo.type = 'P' --SP's and o.name = @curObjName) insert into ##tmpSP SELECT proc_name, table_name, xType, 'N' FROM stored_procedures WHERE row = 1 and proc_name not in ( Select proc_name from ##tmpSP ) ORDER BY proc_name,table_name ​ End ​ if @curXType = 'v' Begin ​ ;WITH stored_procedures AS ( SELECT o.name AS proc_name, oo.name AS table_name, oo.type AS xType, ROW_NUMBER() OVER(partition by o.name,oo.name, oo.Type ORDER BY o.name,oo.name, oo.Type) AS row FROM sysdepends d INNER JOIN sysobjects o ON o.id=d.id INNER JOIN sysobjects oo ON oo.id=d.depid WHERE o.xtype = 'v' and oo.type = 'U' --Tables and o.name = @curObjName) insert into #tmpTables SELECT proc_name, table_name FROM stored_procedures WHERE row = 1 ORDER BY proc_name,table_name ​ End ​ update ##tmpSP set Processed = 'Y' where table_name = @curObjName ​ ​ End ​ ​ Select distinct table_name from #tmpTables ​ drop table #tmpTables drop table ##tmpSP

qaru.site

Получить список всех таблиц в Oracle? Безопасный SQL

Как я могу запросить базу данных Oracle для отображения имен всех таблиц в ней?

SELECT owner, table_name FROM dba_tables

Предполагается, что у вас есть доступ к представлению DBA_TABLES данных DBA_TABLES . Если у вас нет этих привилегий, но они нуждаются в них, вы можете запросить, чтобы администратор базы данных явно предоставил вам привилегии в этой таблице или что администратор баз данных предоставляет вам привилегию SELECT ANY DICTIONARY или роль SELECT_CATALOG_ROLE (любой из которых позволит вам запрашивать любая таблица словаря данных). Конечно, вы можете исключить некоторые схемы, такие как SYS и SYSTEM которые имеют большое количество таблиц Oracle, которые вам, вероятно, не волнуют.

В качестве альтернативы, если у вас нет доступа к DBA_TABLES , вы можете увидеть все таблицы, к которым ваша учетная запись имеет доступ, через представление ALL_TABLES :

SELECT owner, table_name FROM all_tables

Хотя это может быть подмножество таблиц, доступных в базе данных ( ALL_TABLES показывает вам информацию для всех таблиц, которым был предоставлен ваш пользователь).

Если вас интересуют только те таблицы, которые у вас есть, а не те, к которым у вас есть доступ, вы можете использовать USER_TABLES :

SELECT table_name FROM user_tables

Поскольку USER_TABLES имеет только информацию о ваших собственных таблицах, у нее нет колонки OWNER – владелец, по определению, является вами.

Oracle также имеет ряд устаревших представлений словаря данных – например, TAB , DICT , TABS и CAT которые можно использовать. В общем, я бы не предложил использовать эти устаревшие представления, если вам не нужно полностью использовать ваши сценарии для Oracle 6. Oracle не изменил эти представления за долгое время, поэтому у них часто возникают проблемы с новыми типами объектов. Например, представления TAB и CAT отображают информацию о таблицах, которые находятся в [DBA|ALL|USER]_TABLES пользователя, в то время как просмотры [DBA|ALL|USER]_TABLES все фильтруют их. CAT также показывает информацию о материализованных журналах просмотра с TABLE_TYPE «ТАБЛИЦА», которая вряд ли будет тем, что вы действительно хотите. DICT объединяет таблицы и синонимы и не говорит вам, кому принадлежит этот объект.

Запрос user_tables и dba_tables не работал. Это было сделано:

select table_name from all_tables

Идя дальше, есть еще один вид, называемый cols (all_tab_columns), который может использоваться для определения того, какие таблицы содержат заданное имя столбца.

Например:

SELECT table_name, column_name FROM cols WHERE table_name LIKE 'EST%' AND column_name LIKE '%CALLREF%';

найти все таблицы, имеющие имя, начинающееся с EST, и столбцы, содержащие CALLREF в любом месте их имен.

Это может помочь при разработке тех столбцов, к которым вы хотите присоединиться, например, в зависимости от ваших соглашений об именах таблиц и столбцов.

Для лучшего просмотра с помощью sqlplus

Если вы используете sqlplus вы можете сначала настроить несколько параметров для более удобного просмотра, если ваши столбцы становятся искалеченными (эти переменные не должны сохраняться после выхода из сеанса sqlplus ):

set colsep '|' set linesize 167 set pagesize 30 set pagesize 1000

Показать все таблицы

Затем вы можете использовать что-то подобное, чтобы увидеть все имена таблиц:

SELECT table_name, owner, tablespace_name FROM all_tables;

Показать таблицы, которые вы используете

Как упоминает @Justin Cave, вы можете использовать это, чтобы показать только те таблицы, которые у вас есть:

SELECT table_name FROM user_tables;

Не забывайте о представлениях

Имейте в виду, что некоторые «таблицы» на самом деле могут быть «видами», поэтому вы можете попробовать запустить что-то вроде:

SELECT view_name FROM all_views;

Результаты

Это должно дать что-то, что выглядит довольно приемлемым, например:

Простой запрос для выбора таблиц для текущего пользователя:

SELECT table_name FROM user_tables; select object_name from user_objects where object_type='TABLE';

—————-ИЛИ——————

select * from tab;

—————-ИЛИ——————

select table_name from user_tables;

Попробуйте просмотреть словарные данные ниже.

tabs dba_tables all_tables user_tables

Попробуйте выбрать из user_tables, в котором перечислены таблицы, принадлежащие текущему пользователю.

С помощью любого из них вы можете выбрать:

SELECT DISTINCT OWNER, OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME'; SELECT DISTINCT OWNER, OBJECT_NAME FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME'; select * from dba_tables

дает все таблицы всех пользователей, только если пользователь, с которым вы вошли в систему, имеет привилегии sysdba .

Для этого существует 3 элемента данных

DBA_TABLES описывает все реляционные таблицы в базе данных.

SELECT owner, table_name FROM dba_tables

Описание реляционных таблиц, доступных пользователю

SELECT owner, table_name FROM all_tables

USER_TABLES описывает реляционные таблицы, принадлежащие текущему пользователю. В этом представлении не отображается столбец OWNER .

SELECT table_name FROM user_tables

Я не нашел ответа, который указывал бы на использование

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

поэтому решил добавить мою версию. Этот вид фактически возвращает больше, чем DBA_TABLES, поскольку он также возвращает таблицы объектов ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).

Вы можете использовать Oracle Data Dictionary для получения информации об объектах oracle.

Список таблиц можно получить по-разному:

select * from dba_tables

или, например:

select * from dba_objects where object_type = 'TABLE'

Затем вы можете получить столбцы таблицы, используя имя таблицы:

select * from dba_tab_columns

Затем вы можете получить список зависимостей (триггеры, представления и т. Д.):

select * from dba_dependencies where referenced_type='TABLE' and referenced_name=:t_name

Затем вы можете получить текстовый источник этих объектов:

select * from dba_source

И вы можете использовать USER или ALL а не DBA если хотите.

Включая взгляды:

SELECT owner, table_name as table_view FROM dba_tables UNION ALL SELECT owner, view_name as table_view FROM DBA_VIEWS

Мы можем получить все таблицы, включая данные столбца, из нижеследующего запроса:

SELECT * FROM user_tab_columns;

Ниже приведен фрагмент комментариев SQL-запросов, описывающий, как параметры, которые вы можете использовать:

-- need to have select catalog role SELECT * FROM dba_tables; -- to see tables of your schema SELECT * FROM user_tables; -- tables inside your schema and tables of other schema which you possess select grants on SELECT * FROM all_tables;

Следующий запрос содержит только список необходимых данных, тогда как другие ответы дали мне дополнительные данные, которые меня только смутили.

select table_name from user_tables;

sql.fliplinux.com

tsql - SQL Server 2000: как получить список таблиц и количество строк?

На этом вы можете отправиться на целый свиньи. Проблема с использованием sysIndexes для получения rowcounts заключается в том, что они не всегда актуальны. Тем не менее, есть способ сделать их все современными. Следующий код даст вам количество строк для каждой таблицы и целую группу.

/********************************************************************************************************************** Purpose: Returns a single result set similar to sp_Space used for all user tables at once. Notes: 1. May be used as a view, stored procedure, or table-valued function. 2. Must comment out 1 "Schema" in the SELECT list below prior to use. See the adjacent comments for more info. Revision History: Rev 00 - 22 Jan 2007 - Jeff Moden - Initital creation for SQL Server 2000 Rev 01 - 11 Mar 2007 - Jeff Moden - Add automatic page size determination for future compliance Rev 02 - 05 Jan 2008 - Jeff Moden - Change "Owner" to "Schema" in output. Add optional code per Note 2 to find correct schema name **********************************************************************************************************************/ --===== Ensure that all row counts, etc is up to snuff -- Obviously, this will not work in a view or UDF and should be removed if in a view or UDF. External code should -- execute the command below prior to retrieving from the view or UDF. DBCC UPDATEUSAGE(0) WITH COUNT_ROWS, NO_INFOMSGS --===== Return the single result set similar to what sp_SpaceUsed returns for a table, but more SELECT DBName = DB_NAME(), --SchemaName = SCHEMA_NAME(so.UID), --Comment out if for SQL Server 2000 SchemaName = USER_NAME(so.UID), --Comment out if for SQL Server 2005 TableName = so.Name, TableID = so.ID, MinRowSize = MIN(si.MinLen), MaxRowSize = MAX(si.XMaxLen), ReservedKB = SUM(CASE WHEN si.IndID IN (0,1,255) THEN si.Reserved ELSE 0 END) * pkb.PageKB, DataKB = SUM(CASE WHEN si.IndID IN (0,1 ) THEN si.DPages ELSE 0 END) * pkb.PageKB + SUM(CASE WHEN si.IndID IN ( 255) THEN ISNULL(si.Used,0) ELSE 0 END) * pkb.PageKB, IndexKB = SUM(CASE WHEN si.IndID IN (0,1,255) THEN si.Used ELSE 0 END) * pkb.PageKB - SUM(CASE WHEN si.IndID IN (0,1 ) THEN si.DPages ELSE 0 END) * pkb.PageKB - SUM(CASE WHEN si.IndID IN ( 255) THEN ISNULL(si.Used,0) ELSE 0 END) * pkb.PageKB, UnusedKB = SUM(CASE WHEN si.IndID IN (0,1,255) THEN si.Reserved ELSE 0 END) * pkb.PageKB - SUM(CASE WHEN si.IndID IN (0,1,255) THEN si.Used ELSE 0 END) * pkb.PageKB, Rows = SUM(CASE WHEN si.IndID IN (0,1 ) THEN si.Rows ELSE 0 END), RowModCtr = MIN(si.RowModCtr), HasTextImage = MAX(CASE WHEN si.IndID IN ( 255) THEN 1 ELSE 0 END), HasClustered = MAX(CASE WHEN si.IndID IN ( 1 ) THEN 1 ELSE 0 END) FROM dbo.SysObjects so, dbo.SysIndexes si, (--Derived table finds page size in KB according to system type SELECT Low/1024 AS PageKB --1024 is a binary Kilo-byte FROM Master.dbo.spt_Values WHERE Number = 1 --Identifies the primary row for the given type AND Type = 'E' --Identifies row for system type ) pkb WHERE si.ID = so.ID AND si.IndID IN (0, --Table w/o Text or Image Data 1, --Table with clustered index 255) --Table w/ Text or Image Data AND so.XType = 'U' --User Tables AND PERMISSIONS(so.ID) <> 0 GROUP BY so.Name, so.UID, so.ID, pkb.PageKB ORDER BY ReservedKB DESC

qaru.site

c# - Как я могу получить список таблиц в базе данных SQL Server вместе с первичным ключом, используя ТОЛЬКО С#?

Здесь начинается (SQL 2005 и выше):

SELECT ta.name TableName, ind.name IndexName from sys.tables ta left outer join sys.indexes ind on ind.object_id = ta.object_id and ind.is_primary_key = 1

Таблицы без первичных ключей имеют значение IndexName равное Null.

Но это просто перечисляет имя первичного ключа. Вам нужен список столбцов (ов) в ключе?

- ДОБАВЛЕНО ----------------

Вот часть утилиты, которую я когда-то писал. Это приведет к отображению всех таблиц и столбцов в порядке всех существующих первичных ключей:

SELECT ta.name TableName, ind.name IndexName, indcol.key_ordinal IndexColumnOrder, col.name ColumnName from sys.tables ta left outer join sys.indexes ind on ind.object_id = ta.object_id and ind.is_primary_key = 1 left outer join sys.index_columns indcol on indcol.object_id = ta.object_id and indcol.index_id = ind.index_id left outer join sys.columns col on col.object_id = ta.object_id and col.column_id = indcol.column_id order by ta.Name ,indcol.key_ordinal

При взломе следующего списка будут перечислены все (и только) таблицы с первичными ключами только одного столбца:

SELECT ta.name TableName, max(col.name) ColumnName from sys.tables ta inner join sys.indexes ind on ind.object_id = ta.object_id and ind.is_primary_key = 1 inner join sys.index_columns indcol on indcol.object_id = ta.object_id and indcol.index_id = ind.index_id inner join sys.columns col on col.object_id = ta.object_id and col.column_id = indcol.column_id group by ta.name having count(*) = 1 order by ta.Name

Что касается преобразования этого кода в С# (не мой файл), вы можете либо сделать это хранимой процедурой, либо просто создать и отправить запрос из своего кода.

qaru.site

sql - Как получить список таблиц, который содержит общее значение столбца в SQL Server

У меня есть несколько таблиц, в которых некоторые из них имеют общий Asset_ID, каков будет запрос на получение списка имен таблиц с общим Asset_ID.

задан kingshuk 03 июля '13 в 10:16 источник поделиться

попробуйте select table_name from information_schema.columns where column_name='Asset_ID'

Если вы хотите получить имена таблиц в зависимости от значения данных в столбце, вы не можете получить его простым запросом, попробуйте следующее

declare @val_to_search varchar(50), @column_name varchar(50) Select @val_to_search = 'ddh324', @column_name='Asset_ID' declare tbl cursor for select table_name from information_schema.columns where column_name=@column_name declare @tablename varchar(200),@qstr varchar(max) declare @datapen table(table_name varchar(200)) open tbl fetch tbl into @tablename while @@fetch_status=0 begin select @qstr='select top 1 '''+@tablename+''' from '+@tablename+' where '+ @column_name + ' =''' + @val_to_search + '''' insert into @datapen exec(@qstr) fetch tbl into @tablename end close tbl deallocate tbl select * from @datapen pen ответ дан bansi 03 июля '13 в 10:27 источник поделиться

Внизу запрос может помочь вам!

В этом запросе будут перечислены все таблицы вместе с именами столбцов!

SELECT * FROM INFORMATION_SCHEMA.COLUMNS, где COLUMN_NAME LIKE '% columnName%'

В этом запросе будут перечислены все таблицы!

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' И TABLE_NAME LIKE '% tableName%'

источник поделиться

Я всегда использую это, чтобы найти все ключевое слово match, он будет перечислять все совпадения sp, tables, function...

select distinct name from syscomments c join sysobjects o on c.id = o.id where TEXT like '%Asset_ID%' ответ дан tsohtan 03 июля '13 в 12:17 источник поделиться

qaru.site

sql - Impala/Hive, чтобы получить список таблиц вместе с его размером

Улей

CLI

show table extended like '.*' tableName:t100k owner:cloudera location:file:/home/cloudera/local/t100k inputformat:org.apache.hadoop.mapred.TextInputFormat outputformat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat columns:struct columns { i32 i} partitioned:false partitionColumns: totalNumberFiles:1 totalFileSize:588895 maxFileSize:588895 minFileSize:588895 lastAccessTime:0 lastUpdateTime:1492675975000 tableName:t10k owner:cloudera location:file:/home/cloudera/local/t10k inputformat:org.apache.hadoop.mapred.TextInputFormat outputformat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat columns:struct columns { i32 i} partitioned:false partitionColumns: totalNumberFiles:1 totalFileSize:48894 maxFileSize:48894 minFileSize:48894 lastAccessTime:0 lastUpdateTime:1492675978000 tableName:t1k owner:cloudera location:file:/home/cloudera/local/t1k inputformat:org.apache.hadoop.mapred.TextInputFormat outputformat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat columns:struct columns { i32 i} partitioned:false partitionColumns: totalNumberFiles:1 totalFileSize:3893 maxFileSize:3893 minFileSize:3893 lastAccessTime:0 lastUpdateTime:1492675983000 tableName:t1m owner:cloudera location:file:/home/cloudera/local/t1m inputformat:org.apache.hadoop.mapred.TextInputFormat outputformat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat columns:struct columns { i32 i} partitioned:false partitionColumns: totalNumberFiles:1 totalFileSize:6888896 maxFileSize:6888896 minFileSize:6888896 lastAccessTime:0 lastUpdateTime:1492675968000

Метасторе (например, MySql)

select d.name as db_name ,t.tbl_name as tbl_name ,from_unixtime(min(t.create_time)) as create_time ,min(t.owner) as owner ,min(case when tp.param_key = 'COLUMN_STATS_ACCURATE' then tp.param_value end) as COLUMN_STATS_ACCURATE ,min(case when tp.param_key = 'last_modified_by' then tp.param_value end) as last_modified_by ,min(case when tp.param_key = 'last_modified_time' then from_unixtime(tp.param_value) end) as last_modified_time ,min(case when tp.param_key = 'numFiles' then tp.param_value end) as numFiles ,min(case when tp.param_key = 'numRows' then tp.param_value end) as numRows ,min(case when tp.param_key = 'rawDataSize' then tp.param_value end) as rawDataSize ,min(case when tp.param_key = 'totalSize' then tp.param_value end) as totalSize ,min(case when tp.param_key = 'transient_lastDdlTime' then from_unixtime(tp.param_value) end) as transient_lastDdlTime from metastore.DBS as d join metastore.TBLS as t on t.db_id = d.db_id join metastore.TABLE_PARAMS as tp on tp.tbl_id = t.tbl_id group by d.name ,t.tbl_name order by d.name ,t.tbl_name +---------+----------+---------------------+----------+-----------------------+------------------+---------------------+----------+---------+-------------+-----------+-----------------------+ | db_name | tbl_name | create_time | owner | COLUMN_STATS_ACCURATE | last_modified_by | last_modified_time | numFiles | numRows | rawDataSize | totalSize | transient_lastDdlTime | +---------+----------+---------------------+----------+-----------------------+------------------+---------------------+----------+---------+-------------+-----------+-----------------------+ | local | t100k | 2017-04-19 23:25:20 | cloudera | true | cloudera | 2017-04-19 23:27:28 | 1 | 100000 | 488895 | 588895 | 2017-04-20 01:12:55 | | local | t10k | 2017-04-19 23:25:26 | cloudera | true | cloudera | 2017-04-19 23:27:26 | 1 | 10000 | 38894 | 48894 | 2017-04-20 01:12:58 | | local | t1k | 2017-04-19 23:25:30 | cloudera | true | cloudera | 2017-04-19 23:27:22 | 1 | 1000 | 2893 | 3893 | 2017-04-20 01:13:03 | | local | t1m | 2017-04-19 23:20:59 | cloudera | true | cloudera | 2017-04-19 23:27:30 | 1 | 1000000 | 5888896 | 6888896 | 2017-04-20 01:12:48 | +---------+----------+---------------------+----------+-----------------------+------------------+---------------------+----------+---------+-------------+-----------+-----------------------+

qaru.site

Получение списка таблиц и полей в каждой в базе данных Безопасный SQL

Я смотрю на создание базовой ORM (исключительно для удовольствия), и мне было интересно, есть ли способ вернуть список таблиц в базе данных, а также поля для каждой таблицы?

Используя это, я хочу иметь возможность прокручивать результирующий набор (в C #), а затем говорить для каждой таблицы в наборе результатов, делать это (например, использовать отражение, чтобы создать класс, который будет выполнять или содержать xyz).

В дополнение к этому, какие хорошие онлайн-блоги для SQL Server? Я знаю, что этот вопрос действительно касается использования системных SP и баз данных на Sql Server, и я в порядке с общими запросами, поэтому меня интересуют некоторые блоги, которые охватывают такую ​​функциональность.

Это то, что вы ищите:

Использование OBJECT CATALOG VIEWS

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

Использование ПРОСМОТРОВ ИНФОРМАЦИОННОЙ СХЕМЫ

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;

Ссылка: Мой блог – http://dbalink.wordpress.com/2008/10/24/querying-the-object-catalog-and-information-schema-views/

Столы ::

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

столбцы ::

SELECT * FROM INFORMATION_SCHEMA.COLUMNS

или

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

Получить список всех таблиц и полей в базе данных:

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

Получить список всех полей в таблице:

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

Я проверил несколько решений, которые обнаружили, что

Select * From INFORMATION_SCHEMA.COLUMNS

дает вам информацию о столбцах для вашей базы данных CURRENT / default.

Select * From <DBNAME>.INFORMATION_SCHEMA.COLUMNS

, без <и>, дает вам информацию о столбцах для базы данных DBNAME.

Другим встроенным другом здесь является система sproc SP_HELP.

использование образца ::

sp_help <MyTableName>

Он возвращает намного больше информации, чем вам действительно понадобится, но по крайней мере 90% ваших возможных требований будут удовлетворены.

Просто выбросьте это – теперь легко скопировать / вставить в слово или google doc:

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 '<h3>' + @tableName + '</h3>' 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>'

Это даст вам все созданные пользователем таблицы:

select * from sysobjects where xtype='U'

Чтобы получить cols:

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

Кроме того, я нахожу http://www.sqlservercentral.com/, чтобы быть довольно хорошим ресурсом db.

Я нашел простой способ получить информацию о таблицах и столбцах конкретной БД с помощью SQL-разработчика.

Select *FROM USER_TAB_COLUMNS Select * From INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = "<DatabaseName>"

Это вернет имя базы данных, имя таблицы, имя столбца и тип данных столбца, заданного параметром базы данных:

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

sql.fliplinux.com