• This is my third iteration on this idea.  Produces 1 result set, documents the DB and table so this could be used on several DBs to produce a joined list:

    declare @DB_nme sysname

    set @DB_nme = '  pubs  '

    set NOCOUNT ON

    declare @sql nvarchar(900)

    if (CHARINDEX('[',@DB_nme, 0) = 0) set @DB_nme = '[' + rtrim(ltrim(@DB_nme)) + ']'

    set @sql = 'use ' + @DB_nme + '

    set NOCOUNT ON

    declare @sql nvarchar(500)

    create table #TablCnt (DBName sysname, TableName sysname, NumRows int)

    declare @crs cursor

    set @crs = cursor FAST_FORWARD FOR

    select ''insert into #TablCnt (DBName, TableName, NumRows)

    select ''''' + @DB_nme + ''''',''''['' + table_name + '']'''',count(*) from '+ @DB_nme

        + '.dbo.['' + table_name + '']'' from INFORMATION_SCHEMA.TABLES

    open @crs

    FETCH NEXT FROM @crs

    INTO @sql

    WHILE @@FETCH_STATUS = 0

    BEGIN

     exec (@sql)

     FETCH NEXT FROM @crs

     INTO @sql

    END

    close @crs

    deallocate @crs

    select * from #TablCnt

    '

    exec sp_executesql @sql