Назад | Перейти на главную страницу

Как уйти только напр. ТОП 100 записей во ВСЕХ ТАБЛИЦАХ в базе данных (SQL SERVER 2005)

У меня огромная база данных размером более 100 ГБ, и мне нужно записать приложение (в демонстрационных целях) на CD или DVD, которое использует эту огромную базу данных ... есть ли способ, как оставить, например, только первые 100 записей ВО ВСЕХ ТАБЛИЦАХ?

Заранее спасибо.

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

exec sp_MSforeachtable 'ВЫБРАТЬ TOP 100 * INTO [newdb].[?] ИЗ [olddb]. [?] ';

Иногда мне приходится делать что-то подобное, обычно когда я беру производственную базу данных на разработку или тестирование.

В большинстве случаев я пытаюсь определить, есть ли несколько таблиц, которые занимают почти все пространство - обычно это так.

Запустите этот скрипт:

DECLARE @table_name VARCHAR(500)
DECLARE @schema_name VARCHAR(500)
DECLARE @tab1 TABLE(
tablename VARCHAR (500) collate database_default
,schemaname VARCHAR(500) collate database_default
)
CREATE TABLE #temp_Table (
tablename sysname
,row_count BIGINT
,reserved VARCHAR(50) collate database_default
,data VARCHAR(50) collate database_default
,index_size VARCHAR(50) collate database_default
,unused VARCHAR(50) collate database_default
)
INSERT INTO @tab1
SELECT Table_Name, Table_Schema
FROM information_schema.tables
WHERE TABLE_TYPE = 'BASE TABLE'
DECLARE c1 CURSOR FOR
SELECT Table_Schema + '.' + Table_Name
FROM information_schema.tables t1
WHERE TABLE_TYPE = 'BASE TABLE'
OPEN c1
FETCH NEXT FROM c1 INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @table_name = REPLACE(@table_name, '[','');
SET @table_name = REPLACE(@table_name, ']','');
--make sure the object exists before calling sp_spaceused
IF EXISTS(SELECT id FROM sysobjects WHERE id = OBJECT_ID(@table_name))
BEGIN
INSERT INTO #temp_Table EXEC sp_spaceused @table_name, false;
END
FETCH NEXT FROM c1 INTO @table_name
END
CLOSE c1
DEALLOCATE c1
SELECT t1.*
,t2.schemaname
FROM #temp_Table t1
INNER JOIN @tab1 t2 ON (t1.tablename = t2.tablename )
ORDER BY schemaname,t1.tablename;
DROP TABLE #temp_Table

Я не писал его сам, но сохранил его в текстовом файле, и мне было стыдно, что я больше не помню, на какой источник указывать ... Кстати, вы можете сделать то же самое в Management Studio (добавьте столбец «Размер» в подробное представление).

Теперь вы знаете, какие таблицы занимают больше всего места, и можете работать с ними индивидуально.

РЕДАКТИРОВАТЬ: найден источник: http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/