返工查询以在名称中包含Schema

时间:2015-02-26 16:37:38

标签: tsql sql-server-2008-r2

我正在接收这篇文章:Query to list number of records in each table in a database

使用此程序:

CREATE PROCEDURE ListTableRowCounts 
AS 
BEGIN 
    SET NOCOUNT ON 

    CREATE TABLE #TableCounts
    ( 
        TableName VARCHAR(500), 
        CountOf INT 
    ) 

    INSERT #TableCounts
        EXEC sp_msForEachTable 
            'SELECT PARSENAME(''?'', 1), 
            COUNT(*) FROM ? WITH (NOLOCK)' 

    SELECT TableName , CountOf 
        FROM #TableCounts
        ORDER BY TableName 

    DROP TABLE #TableCounts
END
GO

该过程运行良好,但我需要它将名称输出为Schema.Name并按其排序。

这可能吗?我不知道如何改变这一点,但你可以看到它在下面做了什么:

enter image description here

我有几个实例,表名从不同的模式中是相同的。

2 个答案:

答案 0 :(得分:2)

CREATE PROCEDURE ListTableRowCounts 
AS 
BEGIN 
    SET NOCOUNT ON 

    CREATE TABLE #TableCounts
    (   SchemaName VARCHAR(500),
        TableName VARCHAR(500), 
        CountOf INT 
    ) 

    INSERT #TableCounts
        EXEC sp_msForEachTable 
            'SELECT PARSENAME(''?'', 2), PARSENAME(''?'', 1), 
            COUNT(*) FROM ? WITH (NOLOCK)' 

    SELECT SchemaName, TableName , CountOf 
        FROM #TableCounts
        ORDER BY TableName, SchemaName 

    DROP TABLE #TableCounts
END
GO

答案 1 :(得分:0)

https://stackoverflow.com/a/1443723/4584335

获取一些代码

和来自:How do I list all tables in all databases in SQL Server in a single result set?

我可以建议这个(以防万一" sp_msForEachTable"不再存在):

declare @sql nvarchar(max);

select @sql = isnull(@sql + N'union all ', '')
 + N'
select  b.name as "DB"
        ,a.name collate Latin1_General_CI_AI
        ,a.object_id
        ,a.schema_id
        ,' + cast(database_id as nvarchar(10)) + N'
        ,p.[Rows]
from    ' + quotename(name) + N'.sys.tables a
join      
        ' + quotename(name) + N'.sys.indexes i
    on  a.OBJECT_ID = i.object_id
    and i.index_id <= 1
join 
        ' + quotename(name) + N'.sys.partitions p
    on  i.object_id = p.OBJECT_ID
    and i.index_id = p.index_id
join    sys.databases b
    on  database_id=' + cast(database_id as nvarchar(10)) + ' '
from    sys.databases
where   state = 0
and     user_access = 0;

exec sp_executesql @sql;