para obtener una forma sencilla de obtener todas las tablas en el servidor, intente esto:
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
devolverá una única columna que contiene el servidor+base de datos+esquema+nombre de la tabla:salida de muestra:
CompleteTableName
--------------------------------------------
YourServer.YourDatabase1.YourSchema1.YourTable1
YourServer.YourDatabase1.YourSchema1.YourTable2
YourServer.YourDatabase1.YourSchema2.YourTable1
YourServer.YourDatabase1.YourSchema2.YourTable2
YourServer.YourDatabase2.YourSchema1.YourTable1
si no está en SQL Server 2005 o superior, reemplace la tabla DECLARE @AllTables table
con CREATE TABLE #AllTables
y luego cada @AllTables
con #AllTables
y funcionará.
EDITAR
aquí hay una versión que permitirá que se use un parámetro de búsqueda en cualquier parte o partes del servidor+base de datos+esquema+nombres de tabla:
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
establezca @Search en NULL para todas las tablas, establezca cosas como 'dbo.users' o 'users' o '.master.dbo' o incluso incluya comodines como '.master.%u', etc.