Войти

Показать полную графическую версию : MS SQL 2012 - вывести список таблиц отсортированных по размеру


__sa__nya
11-05-2015, 06:54
Доброе время суток. Нужно вывести список таблиц для БД отсортированных по размеру. В SQL Server Management Studio ничего подобного не нашел. Подскажите как это реализовать запросами.

Arkalik
11-05-2015, 08:03
__sa__nya, Сортировка выполняется с командой ORDER BY:
SELECT * FROM Имя_таблицы ORDER BY Имя_атрибута (ASC - по возрастанию, DESC - по убыванию)

__sa__nya
11-05-2015, 08:05
Arkalik, по-моему ваш запрос выводит данные из таблицы, а мне нужно вывести список таблиц из Базы Данных .

lxa85
11-05-2015, 08:19
__sa__nya, может эта статья (http://habrahabr.ru/post/241079/) на Хабре вам поможет?
Статья на MS View a List of Databases on an Instance of SQL Server (https://msdn.microsoft.com/en-us/library/ms188613.aspx)
USE AdventureWorks2012;
GO
SELECT name, database_id, create_date
FROM sys.databases ;
GO

__sa__nya
11-05-2015, 17:58
lxa85, код который вы привели, выводит список всех БД, мне нужно список таблиц из конкретной БД, отсортированных по размеру. Об этом говорится в статье на MS которую вы привели:

This example returns a list of databases on the instance of SQL Server. The list includes the names of the databases, their database IDs, and the dates when the databases were created.

В статье на Хабре информации много (количество записей в таблице, недокументированная функция sp_msForEachTable, получение количества записей из кластерного индекса, операции с кучами) , но по моему вопросу ничего нет.

В общем вопрос открыт и актуален.

User001
11-05-2015, 18:21
мне нужно список таблиц из конкретной БД, отсортированных по размеру »Пример (http://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-database) к MS SQL 2005 - не подходит?

lxa85
11-05-2015, 21:25
__sa__nya, ok, Google
Как в MS SQL получить список всех таблиц (http://www.mashkov.com/2010/12/13/%D0%BA%D0%B0%D0%BA_%D0%B2_ms_sql_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C_%D1%81%D0%BF%D0%B8 %D1%81%D0%BE%D0%BA_%D0%B2%D1%81%D0%B5%D1%85_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86/)
SELECT name FROM dbo.sysobjects where xtype = 'U' order by name
Вам бы посмотреть, какие данные вы можете получить из системных таблиц MS SQL (sys.objects (https://msdn.microsoft.com/ru-ru/library/ms190324.aspx) и др.
Там масса всего интересного.
how-do-i-get-list-of-all-tables-in-a-database-using-tsql (http://stackoverflow.com/questions/175415/how-do-i-get-list-of-all-tables-in-a-database-using-tsql)
SELECT * FROM information_schema.tables
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

Ink0gnit0
12-05-2015, 09:21
__sa__nya,

USE <DBNAME>;

CREATE TABLE #TableState (
name varchar(255),
[rows] int,
reserved varchar(255),
data varchar(255),
index_size varchar(255),
unused varchar(255))

EXEC sp_msforeachtable @command1="INSERT INTO #TableState EXEC sp_spaceused [?]"

SELECT
name,
rows,
CONVERT(bigint, REPLACE(reserved, 'KB', '')) reserved_KB,
CONVERT(bigint, REPLACE(data, 'KB', '')) data_KB,
CONVERT(bigint, REPLACE(index_size, 'KB', '')) index_size_KB,
CONVERT(bigint, REPLACE(unused, 'KB', '')) unused_KB
FROM #TableState
ORDER BY data_kb DESC

DROP TABLE #TableState


MS SQL 2005




© OSzone.net 2001-2012