ถ้าต้องการตรวจสอบว่าตารางใน SQL Server ถูกแก้ไขโครงสร้าง (Schema Modified) ครั้งล่าสุดเมื่อไหร่ (ALTER TABLE, Constraints, Index, Rename) คุณสามารถใช้ System Catalog Views เพื่อดึงข้อมูลนี้ออกมาได้ โดยใช้ query ง่าย ๆ
find_schema_modified.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) |
อ่านเพิ่มเติม