我有一个超过100GB的庞大数据库,我需要刻录应用程序(用于演示目的)在CD或DVD使用这个庞大的数据库…有没有办法如何离开例如只有前100个logging在所有表?
提前致谢。
创build数据库的副本,并使用如下构造将必要的数据复制到它:
exec sp_MSforeachtable'SELECT TOP 100 * INTO [ newdb ]。[?] FROM [ olddb ]。[?]';
我有时候需要做类似的事情,通常是将生产数据库放到开发或testing中。
在大多数情况下,我试图确定是否有几张桌子占据了几乎所有的空间 – 通常情况下是这样。
运行这个脚本:
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
我没有自己写,但它在一个文本文件,我感到羞愧,我不再记得什么来源信贷…你可以做同样的事情在pipe理Studio btw(添加一个“大小”列详细信息视图)。
现在你知道哪些桌子占据了最多的空间,并且可以单独处理它们。
编辑:find源: http : //www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/