2010-03-16 2 views

Répondre

7
sp_msforeachdb 'select "?" AS db, * from [?].sys.tables' 
0

si vous avez besoin d'un jeu de résultats, essayez ceci:

DECLARE @AllTables table (DatabaseName sysname, TableName sysname) 
DECLARE @Current sysname 
     ,@SQL1 varchar(500) 
     ,@SQL2 varchar(500) 
     ,@SQL3 varchar(500) 
     ,@SQL  varchar(1500) 
SELECT TOP 1 @Current=Name FROM sys.databases Order By Name 
SET @SQL1='select db.name, t.TABLE_NAME from ' 
SET @SQL2='.sys.databases db inner join ' 
SET @SQL3='.INFORMATION_SCHEMA.TABLES t on db.name = t.TABLE_CATALOG' 
WHILE @Current IS NOT NULL 
BEGIN 
    SET @[email protected][email protected][email protected][email protected][email protected] 
    INSERT INTO @AllTables 
     EXEC (@SQL) 
    SELECT TOP 1 @Current=Name FROM sys.databases WHERE Name>@Current Order By Name 
    IF @@ROWCOUNT=0 BREAK 
END 

SELECT * FROM @AllTables ORDER BY DatabaseName,TableName 
1

Voici une procédure stockée J'utilise constamment la liste de tous mes tableaux commandés par l'espace utilisé par eux dans la base de données .

GO 

    /****** Object: StoredProcedure [dbo].[dba_SpaceUsed] Script Date: 03/16/2010 15:09:55 ******/ 
    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    CREATE PROC [dbo].[dba_SpaceUsed] 

     @SourceDB varchar (128) = null -- Optional database name 
      -- If omitted, the current database is reported. 
     , @SortBy char(1) = 'S' -- N for name, S for Size 
       -- T for table name 

    AS 

SET NOCOUNT ON 

DECLARE @sql nvarchar (4000) 

IF @SourceDB IS NULL BEGIN 
    SET @SourceDB = DB_NAME() -- The current DB 
END 

-------------------------------------------------------- 
-- Create and fill a list of the tables in the database. 

CREATE TABLE #Tables ( [schema] sysname 
         , TabName sysname) 

SELECT @sql = 'insert #tables ([schema], [TabName]) 
        select TABLE_SCHEMA, TABLE_NAME 
        from ['+ @SourceDB +'].INFORMATION_SCHEMA.TABLES 
         where TABLE_TYPE = ''BASE TABLE''' 
EXEC (@sql) 


--------------------------------------------------------------- 
-- #TabSpaceTxt Holds the results of sp_spaceused. 
-- It Doesn't have Schema Info! 
CREATE TABLE #TabSpaceTxt (
         TabName sysname 
         , [Rows] varchar (11) 
         , Reserved varchar (18) 
         , Data varchar (18) 
         , Index_Size varchar (18) 
         , Unused varchar (18) 
         ) 

--------------------------------------------------------------- 
-- The result table, with numeric results and Schema name. 
CREATE TABLE #TabSpace ([Schema] sysname 
         , TabName sysname 
         , [Rows] bigint 
         , ReservedMB numeric(18,3) 
         , DataMB numeric(18,3) 
         , Index_SizeMB numeric(18,3) 
         , UnusedMB numeric(18,3) 
         ) 

DECLARE @Tab sysname -- table name 
     , @Sch sysname -- owner,schema 

DECLARE TableCursor CURSOR FOR 
    SELECT [SCHEMA], TabNAME 
     FROM #tables 

OPEN TableCursor; 
FETCH TableCursor into @Sch, @Tab; 

WHILE @@FETCH_STATUS = 0 BEGIN 

    SELECT @sql = 'exec [' + @SourceDB 
     + ']..sp_executesql N''insert #TabSpaceTxt exec sp_spaceused ' 
     + '''''[' + @Sch + '].[' + @Tab + ']' + ''''''''; 

    Delete from #TabSpaceTxt; -- Stores 1 result at a time 
    EXEC (@sql); 

    INSERT INTO #TabSpace 
    SELECT @Sch 
     , [TabName] 
     , convert(bigint, rows) 
     , convert(numeric(18,3), convert(numeric(18,3), 
       left(reserved, len(reserved)-3))/1024.0) 
       ReservedMB 
     , convert(numeric(18,3), convert(numeric(18,3), 
       left(data, len(data)-3))/1024.0) DataMB 
     , convert(numeric(18,3), convert(numeric(18,3), 
       left(index_size, len(index_size)-3))/1024.0) 
       Index_SizeMB 
     , convert(numeric(18,3), convert(numeric(18,3), 
       left(unused, len([Unused])-3))/1024.0) 
       [UnusedMB] 
     FROM #TabSpaceTxt; 

    FETCH TableCursor into @Sch, @Tab; 
END; 

CLOSE TableCursor; 
DEALLOCATE TableCursor; 

----------------------------------------------------- 
-- Caller specifies sort, Default is size 
IF @SortBy = 'N' -- Use Schema then Table Name 
    SELECT * FROM #TabSpace 
     ORDER BY [Schema] asc, [TabName] asc 
ELSE IF @SortBy = 'T' -- Table name, then schema 
    SELECT * FROM #TabSpace 
     ORDER BY [TabName] asc, [Schema] asc 
ELSE -- S, NULL, or whatever get's the default 
    SELECT * FROM #TabSpace 
     ORDER BY ReservedMB desc 
; 

DROP TABLE #Tables 
DROP TABLE #TabSpaceTxt 
DROP TABLE #TabSpace 

--Thanks à Andrew Novick

+0

Cela ne fonctionne que par une base de données – JonH

+0

une fois ajouté, exécutez sp_msforeachdb 'si ''?' '<>' 'tempdb' 'exec dbo.dba_SpaceUsed? – Laramie

0

Si vous êtes assez chanceux d'être encore en utilisant SQL2000:

CREATE TABLE #AllTables (DatabaseName sysname, TableName sysname) 
DECLARE @Current sysname 
     ,@SQL1 varchar(500) 
     ,@SQL2 varchar(500) 
     ,@SQL3 varchar(500) 
     ,@SQL  varchar(1500) 
SELECT TOP 1 @Current=Name FROM sysdatabases Order By Name 
SET @SQL1='select db.name, t.TABLE_NAME from ' 
SET @SQL2='sysdatabases db inner join ' 
SET @SQL3='.INFORMATION_SCHEMA.TABLES t on db.name = t.TABLE_CATALOG' 
WHILE @Current IS NOT NULL 
BEGIN 
    SET @[email protected][email protected][email protected][email protected] 
    --PRINT @SQL 
    SET NOCOUNT ON 
    INSERT INTO #AllTables 
     EXEC (@SQL) 
    SET NOCOUNT OFF 
    SELECT TOP 1 @Current=Name FROM sysdatabases WHERE Name>@Current Order By Name 
    IF @@ROWCOUNT=0 BREAK 
END 

SELECT * FROM #AllTables 
--where TableName = 'at_errorlog' 
ORDER BY DatabaseName,TableName 

DROP TABLE #AllTables 
-1
select table_name from user_tables; 
+0

Peut-être que cela fonctionne sur une version de SQL Server. Ça ne marche pas en 2012. – daveloyall

Questions connexes