首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

快速找出包含特定欄位的所有資料表:sysobjects + syscolumns 實戰查詢

     編輯:關於SqlServer

需求:找出資料庫中所有擁有「醫院編號」欄位的資料表,或同時擁有「醫院編號」與「科室編號」的資料表。利用系統表 sysobjects 與 syscolumns 即可秒級完成。

單一欄位查詢

SELECT a.name AS TableName
FROM sysobjects a
JOIN (
    SELECT id
    FROM syscolumns
    WHERE name = 'HospitalID'  -- 目標欄位名
    GROUP BY id
) b ON a.id = b.id
WHERE a.xtype = 'U'  -- 僅使用者資料表
ORDER BY a.name;

多欄位同時存在(AND 邏輯)

SELECT a.name AS TableName
FROM sysobjects a
JOIN (
    SELECT id
    FROM syscolumns
    WHERE name IN ('HospitalID', 'DeptID')
    GROUP BY id
    HAVING COUNT(*) = 2  -- 兩個欄位都要有
) b ON a.id = b.id
WHERE a.xtype = 'U'
ORDER BY a.name;

現代化寫法(SQL Server 2005+ 建議)

系統表已過時,建議改用目錄檢視:

-- 單欄位
SELECT OBJECT_NAME(object_id) AS TableName
FROM sys.columns
WHERE name = 'HospitalID'
ORDER BY TableName;

-- 多欄位 AND
SELECT OBJECT_NAME(object_id) AS TableName
FROM sys.columns
WHERE name IN ('HospitalID', 'DeptID')
GROUP BY object_id
HAVING COUNT(*) = 2
ORDER BY TableName;

補充: 若需同時取得 Schema 名稱,可 JOIN sys.schemas ON schema_id;若要排除系統表,加上 AND OBJECTPROPERTY(object_id, 'IsMSShipped') = 0。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved