หมวดหมู่: SSMS

Microsoft SQL Server Management Studio (SSMS)

SQL Server: เปลี่ยนชื่อตาม naming conventionSQL Server: เปลี่ยนชื่อตาม naming convention

การตั้งชื่อ index, constraint SQL Server ตาม naming convention ที่ SSMS สร้างช่วยให้การจัดระเบียบ ให้ส่วนต่าง ๆ ใน database เป็นระเบียบได้ โดยได้เพิ่ม table filter ไว้อย่าง “PP_” เพราะว่าสร้างไว้แบบ ชื่อของฉัน ชื่อของคุณไว้เยอะมาก จนถ้าดูทีเดียวทั้ง database นี่ดูกันไม่ทัน
find_index_constraint_not_gennarate_naming_convention_not_your_name.sql

-- 1. ประกาศและตั้งค่าตัวแปรสำหรับกรองชื่อตาราง
DECLARE @TableNameFilter NVARCHAR (100) ;
SET @TableNameFilter = '%PP_%'; -- แก้ไขเงื่อนไขของคุณที่นี่ที่เดียว -- 2. ใช้ Common Table Expression (CTE) เพื่อรวมผลลัพธ์
;WITH AllObjectsToRename AS (-- ส่วนที่ 1: ค้นหา Constraints (PK, FK, UQ, DF, CK) ที่ชื่อผิด SELECT s.name AS SchemaName t.name AS TableName, o.name AS OldName, o.type_desc AS ObjectType, (CASE o.type WHEN 'PK' THEN 'PK_' + t.name WHEN 'F' THEN 'FK_' + t.name + '_' + o.name WHEN 'UQ' THEN 'UQ_' + t.name + '_' + o.name WHEN 'D' THEN 'DF_' + t.name + '_' + o.name WHEN 'C' THEN 'CK_' + t.name + '_' + o.name ELSE o.name END) AS ProposedNewName, 'EXEC sp_rename N''' + QUOTENAME (s.name) + '.' + QUOTENAME (o.name) + ''', N''' + (CASE o.type WHEN 'PK' THEN 'PK_' + t.name WHEN 'F' THEN 'FK_' + t.name + '_' + o.name WHEN 'UQ' THEN 'UQ_' + t.name + '_' + o.name WHEN 'D' THEN 'DF_' + t.name + '_' + o.name WHEN 'C' THEN 'CK_' + t.name + '_' + o.name ELSE o.name END) + ''', N''OBJECT'';' AS RenameScript FROM sys.objects AS o JOIN sys.tables AS t ON o.parent_object_id = t.object_id JOIN sys.schemas AS s ON t.schema_id = s.schema_id WHERE o.is_ms_shipped = 0 AND o.type IN ('PK', 'F', 'UQ', 'D', 'C') AND t.name LIKE @TableNameFilter AND ( (o.type = 'PK' AND o.name NOT LIKE 'PK_%') OR (o.type = 'F' AND o.name NOT LIKE 'FK_%') OR (o.type = 'UQ' AND o.name NOT LIKE 'UQ_%') OR (o.type = 'D' AND o.name NOT LIKE 'DF_%') OR (o.type = 'C' AND o.name NOT LIKE 'CK_%')) UNION ALL -- ส่วนที่ 2: ค้นหา Indexes (IX) ที่ชื่อผิด SELECT s.name AS SchemaName, t.name AS TableName, i.name AS OldName, i.type_desc AS ObjectType, 'IX_' + t.name + '_' + i.name AS ProposedNewName, 'EXEC sp_rename N''' + QUOTENAME (s.name) + '.' + QUOTENAME (t.name) + '.' + QUOTENAME (i.name) + ''', N''' + 'IX_' + t.name + '_' + i.name + ''', N''INDEX'';' AS RenameScript FROM sys.indexes AS i JOIN sys.tables AS t ON i.object_id = t.object_id JOIN sys.schemas AS s ON t.schema_id = s.schema_id WHERE i.is_primary_key = 0 AND i.is_unique_constraint = 0 AND i.type_desc != 'HEAP' AND t.is_ms_shipped = 0 AND i.name IS NOT NULL AND t.name LIKE @TableNameFilter AND i.name NOT LIKE 'IX_%') -- 3. สั่ง SELECT และ ORDER BY จาก CTE ด้านบน
SELECT SchemaName, TableName, OldName, ObjectType, ProposedNewName, RenameScript
FROM AllObjectsToRename
ORDER BY SchemaName, TableName, ObjectType, OldName;

ถ้าจะแก้จริง ๆ ให้แน่ใจว่า ชื่อนั้น ๆ ไม่ได้ fixed ไว้ใน code หัวจะปวด งานจะเข้า