Como deixar apenas, e. TOP 100 registros em TODAS AS TABELAS no banco de dados (SQL SERVER 2005) [closed]

1

Estou tendo um banco de dados enorme acima de 100GBs e preciso gravar um aplicativo (para fins de demonstração) em CD ou DVD que utiliza esse enorme banco de dados ... existe uma maneira de deixar por exemplo apenas os primeiros 100 registros IN TODAS AS TABELAS?

Obrigado antecipadamente.

    
por Morignus 05.04.2012 / 10:40

2 respostas

2

Crie uma cópia do banco de dados e copie os dados necessários para ela usando construções como:

exec sp_MSforeachtable 'SELECIONAR TOP 100 * INTO [ newdb ]. [?] FROM [<>> olddb ]. [?]';

    
por 05.04.2012 / 12:43
0

Eu às vezes tenho que fazer algo semelhante, geralmente quando eu levo um banco de dados de produção para dev ou teste.

Na maioria dos casos, tento identificar se há algumas tabelas que ocupam quase todo o espaço - geralmente esse é o caso.

Execute este script:

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

Eu mesmo não escrevi, mas o tenho em um arquivo de texto, e tenho vergonha de não mais lembrar de qual fonte creditar ... Você pode fazer a mesma coisa no Management Studio btw (adicionar uma coluna "Tamanho" aos detalhes ver).

Agora você sabe quais tabelas ocupam mais espaço e pode lidar com elas individualmente.

EDIT: Fonte encontrada: link

    
por 08.04.2012 / 11:59

Tags