aby w prosty sposób uzyskać wszystkie tabele na serwerze, wypróbuj to:
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
zwróci pojedynczą kolumnę zawierającą serwer+bazę danych+schemat+nazwa tabeli:przykładowe dane wyjściowe:
CompleteTableName
--------------------------------------------
YourServer.YourDatabase1.YourSchema1.YourTable1
YourServer.YourDatabase1.YourSchema1.YourTable2
YourServer.YourDatabase1.YourSchema2.YourTable1
YourServer.YourDatabase1.YourSchema2.YourTable2
YourServer.YourDatabase2.YourSchema1.YourTable1
jeśli nie korzystasz z SQL Server 2005 lub nowszego, zastąp tabelę DECLARE @AllTables table
z CREATE TABLE #AllTables
a potem co @AllTables
z #AllTables
i zadziała.
EDYTUJ
Oto wersja, która pozwoli na użycie parametru wyszukiwania w dowolnej części lub częściach nazwy serwera+bazy danych+schematu+tabeli:
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
ustaw @Search na NULL dla wszystkich tabel, ustaw go na rzeczy takie jak „dbo.users”, „users” lub „.master.dbo”, a nawet dołącz symbole wieloznaczne, takie jak „.master.%.u” itp.