一個我以前使用過:
EXEC master.sys.sp_MSForEachDB N'
IF ''?'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'')
BEGIN
USE ?
SELECT ''?'' AS theDatabase
, OBJECT_SCHEMA_NAME([tables].[object_id],DB_ID()) AS theSchema
, [tables].name AS theTable
, [columns].[name] AS theColumn
, [types].[name] AS theDatatype
, [columns].max_length AS columnSize
, [columns].[precision] AS columnPrecision
, [columns].scale AS columnScale
, [columns].is_nullable AS isNullable
FROM sys.tables AS [tables]
INNER JOIN sys.all_columns [columns] ON [tables].[object_id] = [columns].[object_id]
INNER JOIN sys.types [types] ON [columns].system_type_id = [types].system_type_id
AND [columns].user_type_id = [types].user_type_id
WHERE [tables].is_ms_shipped = 0
ORDER BY [tables].name, [columns].column_id
END
'
我通常轉儲到一個臨時表,所以我可以更好地處理所得到的數據。
我還沒有遇到sp_MSforEachDB缺失表的問題,但我會檢查Aaron關於該問題的文章。他絕對是我信任的名字。 :-)
您可以使用未記錄的sp_msforeachdb,但它有時會跳過數據庫。你也可以利用動態sql來做到這一點,這可能是我會做的。你想要輸出什麼?只有數據庫名稱,表名和列名? –
做這樣的事情的唯一方法是通過動態SQL。你真正的目標是什麼?你爲什麼想這樣做?你認爲你需要什麼?也許你問的是錯誤的問題,因爲我無法想象這真的有什麼價值......它太籠統和廣泛了。你能把你的問題專注於你的具體需求嗎? – pmbAustin
是的,只需要這三件事。我試圖熟悉新公司的服務器,並想通過瀏覽每個數據庫中的表名和列來探索。另外,我沒有寫權限,並且正在Tableau自定義SQL中執行此操作。 – JJBee