我遇到了一個棘手的問題。我有一個使用Microsoft SQL 2008的數據庫,在這個數據庫中有很多表。這些表格是自動生成的,沒有有意義的名稱。我需要一個特定的表格,而且我似乎無法找到它。訪問數據庫元數據
我知道表中一些列的名稱被調用。有沒有辦法讓我可以一次一個地查看所有表格,查看列的名稱,並查看它們是否與我所知道的相匹配。
如果他們這樣做,那麼我可以看看更遠的表,看看它是否是我正在尋找的。這聽起來像是解決問題的好方法嗎?可能嗎?任何想法從哪裏開始?
我遇到了一個棘手的問題。我有一個使用Microsoft SQL 2008的數據庫,在這個數據庫中有很多表。這些表格是自動生成的,沒有有意義的名稱。我需要一個特定的表格,而且我似乎無法找到它。訪問數據庫元數據
我知道表中一些列的名稱被調用。有沒有辦法讓我可以一次一個地查看所有表格,查看列的名稱,並查看它們是否與我所知道的相匹配。
如果他們這樣做,那麼我可以看看更遠的表,看看它是否是我正在尋找的。這聽起來像是解決問題的好方法嗎?可能嗎?任何想法從哪裏開始?
SELECT OBJECT_SCHEMA_NAME([object_id]),
OBJECT_NAME([object_id])
FROM sys.columns
WHERE name IN ('column 1', 'column 2'
/* , ... other columns */);
編輯的要求,在案件意味着OP爲ALL識別與ANY:使用INFORMATION_SCHEMA.COLUMNS代替SYS.COLUMNS的
SELECT OBJECT_SCHEMA_NAME([object_id), name
FROM sys.tables AS t
WHERE EXISTS
(
SELECT 1 FROM sys.columns
WHERE name = 'column 1'
AND [object_id] = t.[object_id]
)
AND EXISTS
(
SELECT 1 FROM sys.columns
WHERE name = 'column 2'
AND [object_id] = t.[object_id]
)
/* ... repeat for other columns ... */
替代阿龍的回答
SELECT Table_name
FROM
information_schema.columns
WHERE
column_name IN ('column 1', 'column 2')
GROUP BY Table_Name
Having COUNT(column_name) = 2
看到這個Data.SE query爲一個工作示例
一般來說,我建議不要用'INFORMATION_SCHEMA'視圖。 http://stackoverflow.com/questions/7217886/unreliable-information-schema-schema-information-on-sql-server/7310746#7310746 –
@Aaron我同意,但我喜歡儘可能多的工具在我的工具箱中儘可能。同樣在這種情況下(查看錶格和列名稱),我沒有看到令人信服的理由來折扣ANSI標準視圖 –
不,它更關注一致性。如果你不能爲索引使用'INFORMATION_SCHEMA',或者甚至不能使用'INFORMATION_SCHEMA'或更多關於表或列的更豐富的信息,爲什麼將它們用於你的任務子集並且必須切換到其餘的目錄視圖? –
使用上面的腳本,您僅限於SQL通配,這可能非常有限。您可以使用SchemaCrawler grep使用正則表達式更有效地搜索數據庫。 SchemaCrawler還允許您使用其他功能來查找與外鍵相關的表,例如,您可以說找到包含客戶地址列的所有表以及引用這些表的表。 SchemaCrawler是一個與Microsoft SQL Server數據庫驅動程序捆綁在一起的命令行工具。
Sualeh Fatehi,SchemaCrawler
不會與'列1'或者'列2'而不是兩個是回報率表嗎? –
是的,但與編寫一個能夠查找帶* ALL *個已知列名的表的查詢相比,這是一個非常快速的開始。這應該很快縮小它的範圍...... –