2010-05-07 36 views
1

奇怪的情況:我試圖從我的代碼中刪除一些硬編碼。有一種情況,我有一個字段,讓我們說「CityID」,並使用這些信息,我想知道哪個表包含名爲CityID的主鍵。動態確定在SQL服務器中給定字段名稱的表名

從邏輯上講,你可能會說它可能是一張名爲「城市」的表格,但它不是......該表格被稱爲「城市」。數據庫命名中還有一些不一致的地方,因此如果刪除字符串「ID」並找出複數就足夠了,我永遠無法確定。

注意:一旦我發現CityID引用了一個名爲Cities的表格,我將執行一個連接以將CityID替換爲城市名稱。如果有人能告訴我如何找到名字中的第一個varchar字段,我將不勝感激。

回答

1

你所尋求的信息是在information schema views一應俱全。請注意,您會發現許多來源,告訴您如何直接查詢這些視圖到底層的系統表 - 我必須承認,我只是爲了快速找到某些內容而做同樣的事情 - 但推薦的應用程序的方式是去通過這些觀點。

例如,要找到你的CityID柱:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'CityID' 

要在表中查找第一varchar場:

SELECT TOP 1 * FROM INFORMATION_SCHEMA.COLUMNS WHERE 
    TABLE_NAME = 'TableName' 
    AND DATA_TYPE = 'varchar' -- This is off the top of my head! 
ORDER BY ORDINAL_POSITION 
+0

我可以弄清楚該列是PK還是FK?目前它返回多個表格,因爲〜30個表格將該字段作爲FK,但只有一個將該字段作爲PK。 – 2010-05-07 15:38:37

+0

@Salman A:爲此我想你想看看'TABLE_CONSTRAINTS'和'CONSTRAINT_COLUMN_USAGE'(或者'KEY_COLUMN_USAGE')。這些觀點在制定出什麼地方的方面往往是相當可讀的;看看我鏈接的文檔。 – AakashM 2010-05-07 16:35:58

4
SELECT name FROM sysobjects 
WHERE id IN (SELECT id FROM syscolumns WHERE name = 'THE_COLUMN_NAME') 

從指定的表中獲取列信息:從INFORMATION_SCHEMA.COLUMNS

SELECT column_name, data_type, character_maximum_length 
FROM information_schema.columns 
WHERE table_name = 'myTable' 
+0

好,查詢1給了我多個表,因爲不同的表有CityID爲FK。是否有可能將它列爲PK的表格。 – 2010-05-07 15:21:30

+1

爲此,請參閱http://stackoverflow.com/questions/222217/how-do-i-determine-if-a-column-is-in-the-primary-key-of-its-table-sql-server – 2010-05-07 15:24:43

3

選擇table_name的,其中列名= 'CityID'

2

可以使用INFORMATION_SCHEMA表來讀取有關的元數據數據庫。

SELECT 
    TABLE_NAME 
FROM 
    [db].[INFORMATION_SCHEMA].[COLUMNS] 
WHERE 
    COLUMN_NAME='CityID'; 

對於什麼是在INFORMAITON_SCHEMA底漆,看INFORMATION_SCHEMA, a map to your database

相關問題