Category Archive SQL Server

Byphunsanit

SQL Server เช็ค column prefix

เป็นสคริปที่เขียนมาเพราะว่า ตารางที่ใช้อยู่ตอนนี้ แต่ละ table จะมีอยู่ 2 prefix ทำให้เขียน query ออกมาไล่ทุก ๆ ตาราง นับดูว่า มันมี น้อยกว่า มากกว่า มาตราฐานการออกแบบ Design Consistency
audit_table_column_prefix.sql

WITH ColumnPrefixes AS (
    SELECT
        s.name AS SchemaName,
        t.name AS TableName,
        c.name AS ColumnName,
        -- แก้ไขจุดที่ทำให้เกิด Error 537
        CASE
            WHEN CHARINDEX('_', c.name) > 0
            THEN LEFT(c.name, CHARINDEX('_', c.name) - 1)
            ELSE '[No Prefix]'
        END AS Prefix
    FROM sys.tables t
    INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
    INNER JOIN sys.columns c ON t.object_id = c.object_id
    WHERE t.is_ms_shipped = 0
      AND t.name <> 'sysdiagrams'
),
PrefixStats AS (
    SELECT
        SchemaName,
        TableName,
        COUNT(DISTINCT Prefix) AS PrefixCount,
        -- ใช้ STRING_AGG (สำหรับ SQL 2017+) หรือ XML PATH (สำหรับ SQL รุ่นเก่า)
        STUFF((
            SELECT DISTINCT ', ' + cp2.Prefix
            FROM ColumnPrefixes cp2
            WHERE cp2.SchemaName = cp.SchemaName AND cp2.TableName = cp.TableName
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, ''
        ) AS FoundPrefixes
    FROM ColumnPrefixes cp
    GROUP BY SchemaName, TableName
)
SELECT
    SchemaName,
    TableName,
    PrefixCount,
    FoundPrefixes
FROM PrefixStats
WHERE PrefixCount != 2
ORDER BY SchemaName, TableName;

ถ้ามาตราฐานมี prefix ไม่เท่ากับ 2 ก็ลองเปลี่ยนเงื่อนไข เครื่องหมายเป็น > < ดูก็ได้