返工查询以在名称中包含架构

Rework query to include the Schema in the name

我正在吸取这个post: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 并按其排序。

这可能吗?我不确定如何更改它,但您可以在下面看到它在做什么:

我有几个实例是 table 来自不同模式的名称相同。

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

从中获取一些代码:

来自: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;