サーバー上のすべてのテーブルを取得する簡単な方法については、次のことを試してください。
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
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
SQL Server 2005以降を使用していない場合は、DECLARE @AllTables table
を置き換えてください。 CREATE TABLE #AllTables
を使用 そして、すべての@AllTables
#AllTables
を使用 そしてそれは機能します。
編集
これは、サーバー+データベース+スキーマ+テーブル名の任意の部分で検索パラメータを使用できるようにするバージョンです:
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
すべてのテーブルで@SearchをNULLに設定し、「dbo.users」、「users」、「。master.dbo」などに設定するか、「。master。%。u」などのワイルドカードを含めます。