sql >> データベース >  >> RDS >> Sqlserver

SQL Serverのすべてのデータベースのすべてのテーブルを単一の結果セットに一覧表示するにはどうすればよいですか?

    サーバー上のすべてのテーブルを取得する簡単な方法については、次のことを試してください。

    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」などのワイルドカードを含めます。



    1. ドライバーは、Secure Sockets Layer(SSL)暗号化を使用してSQLServerへの安全な接続を確立できませんでした

    2. PostgreSQLでデータベースとテーブルを作成および削除する方法

    3. SQL、クエリビルダー、およびORMの比較

    4. MySQLでSQLの大文字と小文字を区別する文字列比較を行うにはどうすればよいですか?