ถ้าต้องการตรวจสอบว่าตารางใน SQL Server ถูกแก้ไขโครงสร้าง (Schema Modified ) ครั้งล่าสุดเมื่อไหร่ (ALTER TABLE, Constraints, Index, Rename) คุณสามารถใช้ System Catalog Views เพื่อดึงข้อมูลนี้ออกมาได้ โดยใช้ query ง่าย ๆ find_schema_modified.sql
SQL
SELECT name AS TableName ,create_date AS CreatedDate ,modify_date AS LastModifiedDate
FROM sys.objects
WHERE TYPE = 'U' -- 'U' คือ User Table AND name LIKE 'pp_%'
ORDER BY modify_date DESC;
สิ่งที่ทำให้ modify_date เปลี่ยน (Update)
ALTER TABLE : เช่น การเพิ่มคอลัมน์ใหม่ (ADD) , ลบคอลัมน์ (DROP) , หรือเปลี่ยนชนิดข้อมูล (ALTER COLUMN)
Constraints : การเพิ่มหรือลบ Primary Key, Foreign Key หรือ Check Constraints
Index : ในบางกรณีการสร้างหรือลบ Index ที่ผูกกับตารางนั้น ๆ อาจส่งผลให้วันที่ขยับได้
Rename : การเปลี่ยนชื่อตารางโดยใช้ sp_rename
สิ่งที่ “ไม่” ทำให้ modify_date เปลี่ยน
การเพิ่มข้อมูล (INSERT)
การแก้ไขข้อมูล (UPDATE)
การลบข้อมูล (DELETE หรือ TRUNCATE)
การอ่านข้อมูล (SELECT)
ข้อควรระวัง (Caveats)
Index Rebuild : การทำดัชนีใหม่ (Index Rebuild/Reorganize) โดยปกติ จะไม่ ทำให้ modify_date ของตารางเปลี่ยน
Views/Procedures : หากตารางมี View มาอ้างอิง แล้วคุณไปแก้ View วันที่ของตารางหลักก็จะไม่เปลี่ยนเช่นกัน (เพราะโครงสร้างตารางหลักยังเหมือนเดิม)
Database Restore : หากมีการ Restore database มาจากที่อื่น วันที่เหล่านี้จะเป็นวันที่ดั้งเดิมจากเครื่องต้นทาง
สรุปสั้น ๆ : ถ้าคุณเห็น modify_date เปลี่ยน แสดงว่ามีคนไปยุ่งกับ “แบบแปลน” (Schema) ของตาราง ไม่ใช่ “ตัวบ้าน” (Data) ครับ
นอกจากนี้ เรายังสามารถใช้ sys.objects ในการค้นหาการเปลี่ยนแปลงของ Primary key constraint, Synonym, Sequence object, SQL table-valued-function (TVF) , unique constraint, View, X = Extended stored procedure ได้อีกด้วย โดยการเปลี่ยน TYPE =
กลุ่มตารางและวิว (Tables & Views)
Type Type Description คำอธิบาย U USER_TABLE ตารางที่ผู้ใช้สร้างขึ้นเอง V VIEW วิว (Virtual Table) S SYSTEM_TABLE ตารางของระบบ IT INTERNAL_TABLE ตารางภายในที่ SQL Server ใช้ (เช่น Service Broker)
กลุ่มโปรแกรมมิ่ง (Programmability)
Type Type Description คำอธิบาย P SQL_STORED_PROCEDURE Stored Procedure ที่เขียนด้วย SQL FN SQL_SCALAR_FUNCTION Function ที่คืนค่าเดียว (Scalar) TF SQL_TABLE_VALUED_FUNCTION Function ที่คืนค่าเป็นตาราง (Table) IF SQL_INLINE_TABLE_VALUED_FUNCTION Inline Table-valued Function TR SQL_TRIGGER DML Trigger (ตัวดักจับการ Insert/Update/Delete) PC CLR_STORED_PROCEDURE Stored Procedure ที่เขียนด้วย .NET (CLR)
กลุ่มข้อกำหนดและคีย์ (Constraints & Keys)
Type Type Description คำอธิบาย PK PRIMARY_KEY_CONSTRAINT คีย์หลัก (Primary Key) F FOREIGN_KEY_CONSTRAINT คีย์นอก (ความสัมพันธ์ระหว่างตาราง) UQ UNIQUE_CONSTRAINT ข้อกำหนดห้ามข้อมูลซ้ำ D DEFAULT_CONSTRAINT ค่าเริ่มต้นของคอลัมน์ C CHECK_CONSTRAINT ข้อกำหนดตรวจสอบเงื่อนไขข้อมูล
กลุ่มอื่น ๆ (Miscellaneous)
Type Type Description คำอธิบาย SQ SERVICE_QUEUE คิวสำหรับ Service Broker SN SYNONYM ชื่อพ้องสำหรับอ้างอิง Object อื่น AF AGGREGATE_FUNCTION ฟังก์ชันการรวมกลุ่ม (CLR)
อ่านเพิ่มเติม