2013-11-17 2 views

ответ

0

Ниже приведен запрос Microsoft SQL Server, чтобы получить все таблицы, что схемы для таблицы и количества строк.

использовать для конкретной схемы просто раскомментируйте последнюю строку там где предложение (remove/** /). и введите имена схем, которые вы ищете в скобках в последней строке предложения where, которые вы можете ввести более двух, просто просто следуйте шаблону «SchemaName», «SchemaName», «SchemaName».

SELECT 
     t.NAME AS TableName, 
     s.name AS SchemaName, 
     p.[Rows] 
    FROM 
     sys.tables t 
    INNER JOIN  
     sys.indexes i ON t.OBJECT_ID = i.object_id 
    INNER JOIN 
     sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id 
    INNER JOIN 
     sys.schemas s on s.schema_id = t.schema_id 
    WHERE 
     t.NAME NOT LIKE 'dt%' AND 
     i.OBJECT_ID > 255 AND 
     i.index_id <= 1 /* AND 
     s.name in ('Schemaname1','Schemaname2') */ 
    GROUP BY 
     t.NAME, i.object_id, i.index_id, i.name,s.name, p.[Rows] 
    ORDER BY 
     object_name(i.object_id) 

, если вы хотели бы запросить как этот SELECT owner, table_name, NUM_ROWS FROM ALL_TABLES where owner like 'Schema_name'

Я хотел бы предложить создать представление, как это.

CREATE VIEW ALL_TABLES 
AS 
     SELECT 
      t.NAME AS table_name, 
      s.name AS owner, 
      p.[Rows] as NUM_ROWS 
     FROM 
      sys.tables t 
     INNER JOIN  
      sys.indexes i ON t.OBJECT_ID = i.object_id 
     INNER JOIN 
      sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id 
     INNER JOIN 
      sys.schemas s on s.schema_id = t.schema_id 
     WHERE 
      t.NAME NOT LIKE 'dt%' AND 
      i.OBJECT_ID > 255 AND 
      i.index_id <= 1 /* AND 
      s.name in ('Schemaname1','Schemaname2') */ 
     GROUP BY 
      t.NAME, i.object_id, i.index_id, i.name,s.name, p.[Rows] 
     ORDER BY 
      object_name(i.object_id) 

, а затем, если вы запустите следующий запрос будет работать

SELECT owner, table_name, NUM_ROWS FROM ALL_TABLES where owner like 'Schema_name'

Если это помогает, пожалуйста, отметьте ответ как правильный

+0

Пользователь SELECT, имя_таблицы, NUM_ROWS FROM ALL_TABLES , где владелец типа 'Schema_name' Будет ли это работать? – user3002581

+0

Прошу прощения, но это просто неправильно ... OP просил Oracle, и это не будет работать на Oracle. Он также не будет работать на SQL Server; поскольку [говорится в документации] (http://technet.microsoft.com/en-us/library/ms175012.aspx) 'sys.partitions.rows' _" Указывает приблизительное количество строк в этом разделе. "_, поэтому это будет неточно ... – Ben

+0

Я не уверен, как вы можете сказать, что OP хотел бы это для Oracle, поскольку вопрос был действительно расплывчатым. sys.partitions.rows - это самый простой способ сделать это в SQL. –

Смежные вопросы