Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 获取SQL Server中每个数据库中的表数_Sql Server_Tsql_Sql Server 2005 - Fatal编程技术网

Sql server 获取SQL Server中每个数据库中的表数

Sql server 获取SQL Server中每个数据库中的表数,sql-server,tsql,sql-server-2005,Sql Server,Tsql,Sql Server 2005,我有上面的T-SQL脚本,它列出了SQL Server实例上的所有数据库及其相应的大小(以MBs和GBs为单位) 我正在努力解决的问题还包括为每个数据库中的表数添加一列 还有人知道我如何改进上面的脚本以显示每个列出的数据库中的表总数吗。或者,也可以获得每个表中的行数,但这不是一个大问题 我的目标是sql server 2005和obove。不是作为单个脚本,您可以通过 SELECT d.NAME ,ROUND(SUM(mf.size) * 8 / 1024, 0) Size_MBs ,(SUM(

我有上面的T-SQL脚本,它列出了SQL Server实例上的所有数据库及其相应的大小(以MBs和GBs为单位)

我正在努力解决的问题还包括为每个数据库中的表数添加一列

还有人知道我如何改进上面的脚本以显示每个列出的数据库中的表总数吗。或者,也可以获得每个表中的行数,但这不是一个大问题


我的目标是sql server 2005和obove。

不是作为单个脚本,您可以通过

SELECT d.NAME
,ROUND(SUM(mf.size) * 8 / 1024, 0) Size_MBs
,(SUM(mf.size) * 8 / 1024) / 1024 AS Size_GBs
FROM sys.master_files mf
INNER JOIN sys.databases d ON d.database_id = mf.database_id
WHERE d.database_id > 4
GROUP BY d.NAME
ORDER BY d.NAME
参考资料:

关于所有数据库的更广泛的报告可能包括表、视图、过程、触发器、便利设施(xml、空间索引)等方面的统计数据

CREATE TABLE AllTables ([DB Name] sysname, [Schema Name] sysname, [Table Name] sysname)


    DECLARE @SQL NVARCHAR(MAX)

    SELECT @SQL = COALESCE(@SQL,'') + '
    insert into AllTables
    select ' + QUOTENAME(name,'''') + ' as [DB Name], [Table_Schema] as 
    [Table Schema], [Table_Name] as [Table Name] from ' +
    QUOTENAME(Name) + '.INFORMATION_SCHEMA.Tables;' FROM sys.databases
    ORDER BY name 
    EXECUTE(@SQL)     
    SELECT * FROM AllTables ORDER BY [DB Name],[SCHEMA NAME], [Table Name]
    DROP TABLE AllTables
所提供的解决方案远未达到最优,易于掌握和扩展

并非最佳,仅针对零星报告


基于(并归功于):

您不能仅通过扩展当前脚本来完成此操作-表定义存储在每个数据库中各自的元数据表中-并且您不能编写一个SQL查询来连接(未知)数量的其他表(每个数据库一个表)
if object_ID('TempDB..#AllTables','U') IS NOT NULL drop table #AllTables
CREATE TABLE #AllTables (
  [DB Name] sysname, 
  [Tables] int, 
  [Views] int, 
  [Procedures] int, 
  [Triggers] int, 
  [Full Text Catalogs] int, 
  [Xml Indexes] int, 
  [Spatial Indexes] int)

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = COALESCE(@SQL,'') + 'USE ' + quotename(name) + '
insert into #AllTables 
select ' + QUOTENAME(name,'''') + ' as [DB Name], 
    (select count(*) from ' + QUOTENAME(Name) + '.sys.tables),
    (select count(*) from ' + QUOTENAME(Name) + '.sys.views),
    (select count(*) from ' + QUOTENAME(Name) + '.sys.procedures),
    (select count(*) from ' + QUOTENAME(Name) + '.sys.triggers),
    (select count(*) from ' + QUOTENAME(Name) + '.sys.fulltext_catalogs),
    (select count(*) from ' + QUOTENAME(Name) + '.sys.xml_indexes),
    (select count(*) from ' + QUOTENAME(Name) + '.sys.spatial_indexes)
 '
FROM sys.databases
ORDER BY name
-- print @SQL -- debug 
EXECUTE(@SQL)
SELECT * FROM #AllTables