Site icon PlusMagi's Blog By Pitt Phunsanit

SQL Server: หาตารางว่ามี columns อะไรเป็น PK, FK, UQ

ตัวนี้จะต่างจาก SQL Server: หาตารางว่ามี PK, FK, UQ ตรงที่จะบอกว่าตารางนั้น ๆ มี column อะไรบ้างที่ทำหน้าที่ PK (Primary Key), FK (Foreign Key), UQ (Unique Constraint) และชื่อ columns อะไรบ้าง
find_from_table_has_PK_FK_UQ_columns.sql

SELECT
    T.TABLE_SCHEMA,
    T.TABLE_NAME,
    T.CONSTRAINT_NAME,
    T.CONSTRAINT_TYPE,
    -- ใช้ STRING_AGG เพื่อรวมชื่อคอลัมน์ทั้งหมดเข้าด้วยกัน
    STRING_AGG(C.COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY C.COLUMN_NAME) AS Constraint_Columns
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS T
INNER JOIN
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS C
    ON T.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
    AND T.TABLE_NAME = C.TABLE_NAME
WHERE
    T.CONSTRAINT_TYPE IN ('PRIMARY KEY', 'FOREIGN KEY', 'UNIQUE')
GROUP BY
    T.TABLE_SCHEMA,
    T.TABLE_NAME,
    T.CONSTRAINT_NAME,
    T.CONSTRAINT_TYPE
ORDER BY
    T.TABLE_SCHEMA,
    T.TABLE_NAME,
    -- จัดเรียงตามประเภทคอนสเตรนท์: 1=PK, 2=UQ, 3=FK
    CASE T.CONSTRAINT_TYPE
        WHEN 'PRIMARY KEY' THEN 1
        WHEN 'UNIQUE' THEN 2
        WHEN 'FOREIGN KEY' THEN 3
        ELSE 4 -- เผื่อไว้สำหรับประเภทอื่นๆ หากมีการเพิ่มใน WHERE clause
    END,
    T.CONSTRAINT_NAME;

อ่านเพิ่มเติม

Exit mobile version