2017-03-06 51 views
0

我試圖在SQL服務器中獲取列類型。我知道這工作得很好:使用全表路徑名獲取列類型

SELECT DATA_TYPE 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'table_name' and COLUMN_NAME = 'column_name'; 

不過,這並不與

SELECT DATA_TYPE 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = '[database_name].[dbo].[table_name]' and COLUMN_NAME = 'column_name'; 

這是一個存儲過程,在不同的數據庫,我想是能夠的一部分工作通過它完整的路徑名稱,以便它可以從我所處的任何數據庫運行。

+0

表名只是沒有模式和數據庫的名稱。你通常不能做你想做的事情,因爲'INFORMATION_SCHEMA'是在一個數據庫(而不是服務器)內。 'OBJECT_ID'可能會有所幫助。 –

+0

您需要從數據庫中查詢'INFORMATION_SCHEMA.COLUMNS'視圖:'FROM database_name.INFORMATION_SCHEMA.COLUMNS WHERE ....' – Lamak

回答

1

查詢INFORMATION_SCHEMA obects在其他數據庫

例如選擇*在INFORMATION_SCHEMA前將數據庫名稱作爲限定。如果你沒有對它進行硬編碼,你需要使用動態SQL。但是「DbName.INFORMATION_SCHEMA.COLUMNS」會讓你進入正確的系統視圖(在同一臺服務器上),然後TABLE_NAME = x和COLUMN_NAME = y會讓你進入表和列。

SELECT DATA_TYPE 
    FROM THEOTHERDB.INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'table_name' and COLUMN_NAME = 'column_name'; 
+0

是的,工作,謝謝! – Joe

0

它的其他方式! 你需要從OtherDB.information_schema.columns