Category Archive Database

Byphunsanit

SQL Server: หาตารางว่ามี PK, FK, UQ

เป็น script ที่ใช้หาว่าตารางของ SQL Server มี PK (Primary Key), FK (Foreign Key), UQ (Unique Constraint) อยู่หรือไม่มีเลย
find_from_table_has_PK_FK_UQ.sql

SELECT
    T.TABLE_SCHEMA,
    T.TABLE_NAME,
    -- ตรวจสอบว่ามี Primary Key หรือไม่
    MAX(CASE WHEN C.CONSTRAINT_TYPE = 'PRIMARY KEY' THEN 'YES' ELSE 'NO' END) AS Has_PK,
    -- ตรวจสอบว่ามี Foreign Key หรือไม่
    MAX(CASE WHEN C.CONSTRAINT_TYPE = 'FOREIGN KEY' THEN 'YES' ELSE 'NO' END) AS Has_FK,
    -- ตรวจสอบว่ามี Unique Constraint หรือไม่
    MAX(CASE WHEN C.CONSTRAINT_TYPE = 'UNIQUE' THEN 'YES' ELSE 'NO' END) AS Has_UQ,
    -- สรุปสถานะรวม
    CASE
        WHEN COUNT(C.CONSTRAINT_TYPE) = 0 THEN 'NO CONSTRAINTS'
    END AS Constraint_Status
FROM
    INFORMATION_SCHEMA.TABLES AS T
LEFT JOIN
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
    ON T.TABLE_SCHEMA = C.TABLE_SCHEMA
    AND T.TABLE_NAME = C.TABLE_NAME
    AND C.CONSTRAINT_TYPE IN ('PRIMARY KEY', 'FOREIGN KEY', 'UNIQUE') -- กรองเฉพาะ 3 ประเภทที่สนใจ
WHERE
    T.TABLE_TYPE = 'BASE TABLE' -- กรองเอาเฉพาะตารางจริง ไม่ใช่ Views
GROUP BY
    T.TABLE_SCHEMA,
    T.TABLE_NAME
ORDER BY
    T.TABLE_SCHEMA,
    T.TABLE_NAME;

หลังจากรู้ว่าตารางไหนมี PK, FK, UQ แล้วในการทำเอกสารอาจจจะต้องรู้ว่า column อะไร สามารถใช้ SQL Server: หาตารางว่ามี columns อะไรเป็น PK, FK, UQ