para uma maneira simples de obter todas as tabelas no servidor, tente isto:
SET NOCOUNT ON
DECLARE @AllTables table (CompleteTableName nvarchar(4000))
INSERT INTO @AllTables (CompleteTableName)
EXEC sp_msforeachdb 'select @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id'
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY 1
ele retornará uma única coluna que contém o server+database+schema+table name:sample output:
CompleteTableName
--------------------------------------------
YourServer.YourDatabase1.YourSchema1.YourTable1
YourServer.YourDatabase1.YourSchema1.YourTable2
YourServer.YourDatabase1.YourSchema2.YourTable1
YourServer.YourDatabase1.YourSchema2.YourTable2
YourServer.YourDatabase2.YourSchema1.YourTable1
se você não estiver no SQL Server 2005 ou superior, substitua a tabela
DECLARE @AllTables table
com CREATE TABLE #AllTables
e, em seguida, cada @AllTables
com #AllTables
e vai funcionar. EDITAR
aqui está uma versão que permitirá que um parâmetro de pesquisa seja usado em qualquer parte ou partes do servidor+banco de dados+esquema+nomes de tabela:
SET NOCOUNT ON
DECLARE @AllTables table (CompleteTableName nvarchar(4000))
DECLARE @Search nvarchar(4000)
,@SQL nvarchar(4000)
SET @Search=null --all rows
SET @SQL='select @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id WHERE @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name LIKE ''%'+ISNULL(@SEARCH,'')+'%'''
INSERT INTO @AllTables (CompleteTableName)
EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY 1
defina @Search como NULL para todas as tabelas, defina-o para coisas como 'dbo.users' ou 'users' ou '.master.dbo' ou até inclua curingas como '.master.%u', etc.