2016-02-15 50 views
0

我想知道是否可以使用TSQL從服務器顯示所有表格,即使它們來自不同的數據庫?怎麼樣?謝謝。使用TSQL從服務器顯示所有表格

注意:顯示即使它們來自不同的數據庫來的所有表(但在同一臺服務器)

+0

使用這些查詢僅返回當前選擇的數據庫的表。 從Sys.tables中選擇*其中Type ='U' 從INFORMATION_SCHEMA.TABLES中選擇* – JanLeeYu

回答

1

使用無證sp_MSforeachdb過程,以獲得在同一臺服務器使用該

CREATE TABLE #table_list 
    (
    TABLE_CATALOG NVARCHAR (256), 
    TABLE_SCHEMA SYSNAME, 
    TABLE_NAME SYSNAME, 
    TABLE_TYPE VARCHAR (10) 
) 

EXECUTE master.sys.Sp_msforeachdb 
    'USE [?];insert into #table_list select * from information_schema.tables where table_catalog not in (''master'',''model'',''msdb'',''tempdb'')' 

Select * from #table_list 
+0

有沒有一種方法可以將其視爲一個查詢? – JanLeeYu

+0

@JanLeeYu - 立即查看 –

+0

非常感謝您幫助我...您與Mohamed Badr的兩位幾乎都有同樣的答案。 @ VR46 – JanLeeYu

1

所有表的細節您可以使用這個

DECLARE @DatabaseName VARCHAR(MAX); 

CREATE TABLE #TableNames (Name NVARCHAR(MAX)); 

DECLARE db_cursor CURSOR 
FOR 
    SELECT name 
    FROM sys.databases 
    WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb'); 
OPEN db_cursor; 
FETCH NEXT FROM db_cursor INTO @DatabaseName; 
WHILE @@FETCH_STATUS = 0 
    BEGIN 
     EXECUTE('USE ' + @DatabaseName + ';INSERT INTO #TableNames(Name)(SELECT name FROM sys.tables);'); 
     FETCH NEXT FROM db_cursor INTO @DatabaseName; 
    END; 
CLOSE db_cursor; 
DEALLOCATE db_cursor; 

SELECT * 
FROM #TableNames; 

DROP TABLE #TableNames; 

該查詢首先選擇您的所有數據庫名稱然後使用光標循環結果並將表名選擇到臨時表#TableNames並從中選擇最終結果

+0

有沒有辦法只將所有數據返回到一個結果集? – JanLeeYu

+0

當然,我只是更新了我的答案,希望對你有幫助 –

+0

非常感謝你幫助我......你們兩個用VR46差不多有相同的答案。 @Mohamed Badr – JanLeeYu