MS SQL SERVER搜尋某個表的主鍵所在的列名

來源:互聯網
上載者:User

  SELECT SYSCOLUMNS.name
  FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEXKEYS 
  WHERE SYSCOLUMNS.id = object_id('Tab_XXX') --syscolumns.id為該列所屬的表對象ID
  AND SYSOBJECTS.xtype = 'PK' --sysobjects.xtype物件類型
  AND SYSOBJECTS.parent_obj = SYSCOLUMNS.id
  AND SYSINDEXES.id = SYSCOLUMNS.id
  AND SYSOBJECTS.name = SYSINDEXES.name
  AND SYSINDEXKEYS.id = SYSCOLUMNS.id
  AND SYSINDEXKEYS.indid = SYSINDEXES.indid   --同一表的同一列,可能建有不同類型的索引 
  AND SYSCOLUMNS.colid = SYSINDEXKEYS.colid

  注意:這是在4張系統資料表中尋找的,關係比較複雜,大致可以表示為:
  SYSCOLUMNS中存有表中的列colid和表id,sysobjects表中存有主鍵名字(即PK_Table類似)和表id,sysindexes中存 有主鍵名字和表id和index編號,sysindexkeys中存有表id和index編號和列編號,一項一項對應起來後就能找到列名了。

SELECT * FROM SYSCOLUMNS
--SYSCOLUMNS每個表和視圖中的每列在表中佔一行,預存程序中的每個參數在表中也佔一行。
--syscolumns.id為該列所屬的表對象ID
--syscolumns.colid為該列對象ID

SELECT * FROM SYSOBJECTS
--SYSOBJECTS在資料庫內建立的每個對象(約束、預設值、日誌、規則、預存程序、表、視圖、等)在表中佔一行。
--sysobjects.xtype物件類型
--sysobjects.parent_obj父物件的對象標識號(例如,對於觸發器或約束,該標識號為表id)
--sysobjects.name對象名稱,這裡為主鍵名字(即PK_Table類似)

SELECT * FROM SYSINDEXES
--資料庫中的每個索引和表在表中各佔一行。
--sysindexes.id 表ID(如果 indid = 0 或 255)。否則為索引所屬表id。
--sysindexes.name 表名(如果 indid = 0 或 255)。否則為索引的名稱。這裡為有主鍵名字(主鍵必為索引,見下述分析)
--sysindexes.indid 索引ID的類型

SELECT * FROM SYSINDEXKEYS
--資料庫中的每個索引和表在表中各佔一行。
--sysindexkeys.id      表ID
--sysindexkeys.indid  索引ID的類型
--sysindexkeys.colid   列ID

    主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵

    所謂主鍵就是能夠唯一標識表中某一行的屬性或屬性群組,一個表只能有一個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行資料更新、刪除的時候不會出現張冠李戴的錯誤。主鍵除了上述作用外,常常與外鍵構成參照完整性條件約束,防止出現資料不一致。資料庫在設計時,主鍵起到了很重要的作用。

    主鍵可以保證記錄的唯一和主鍵域非空,資料庫管理系統對於主鍵自動產生唯一索引,所以主鍵也是一個特殊的索引。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.