PlusMagi's Blog By Pitt Phunsanit SQL Server SQL Server: หาตารางว่ามี columns อะไรเป็น PK, FK, UQ

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;

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