จากที่มีการใส่ descriptions ลงใน table และ column ไว้เรียบร้อยแล้ว แต่กลับใช้ SQL Server: ค้นหา Table Description ไม่เจอ เลยลอง debug ดู ปรากฏว่า มี space อยู่ 2 ตัวแทนที่จะเป็นตัวเดียว คั่นอยู่ระหว่าง 2 คำ ทำให้หาไม่เจอ เลยเป็นที่มาของ query cleaning descriptions ทั้งใน table และ column
cleaning_table_column_descriptions.sql
SET NOCOUNT ON;
;WITH DirtyDescriptions AS (SELECT
DB_NAME () AS DBName,
SCHEMA_NAME (o.schema_id) AS SchemaName,
OBJECT_NAME (o.object_id) AS TableName,
c.name AS ColumnName,
CAST (ep.value AS nvarchar (max)) AS OldDesc,
LTRIM (RTRIM (REPLACE (REPLACE (REPLACE (CAST (ep.value AS nvarchar (max)) , CHAR (13) , ' ') , CHAR (10) , ' ') , ' ', ' '))) AS CleanDesc
FROM sys.extended_properties ep
INNER JOIN sys.objects o ON ep.major_id = o.object_id
LEFT JOIN sys.columns c ON ep.minor_id = c.column_id AND ep.major_id = c.object_id
WHERE ep.name = N'MS_Description'
AND ep.class = 1
AND ep.value IS NOT NULL
AND (CAST (ep.value AS nvarchar (max)) LIKE '% %'
OR CAST (ep.value AS nvarchar (max)) LIKE '%' + CHAR (13) + '%'
OR CAST (ep.value AS nvarchar (max)) LIKE '%' + CHAR (10) + '%'
OR LTRIM (RTRIM (CAST (ep.value AS nvarchar (max)))) <> CAST (ep.value AS nvarchar (max)))) SELECT
ROW_NUMBER () OVER (ORDER BY SchemaName, TableName, ColumnName) AS [No],
DBName + '.' + SchemaName + '.' + TableName AS [Full_Table_Name],
ISNULL (ColumnName, ' (Table Level) ') AS [Column_Name],
OldDesc AS [Old_Description],
CleanDesc AS [New_Description],
-- เปลี่ยน description ให้สะอาด
N'USE ' + QUOTENAME (DBName) + N'; EXEC sp_updateextendedproperty ' +
N'@name = N''MS_Description'', @value = N''' + REPLACE (CleanDesc, '''', '''''') + N''', ' +
N'@level0type = N''SCHEMA'', @level0name = N''' + SchemaName + N''', ' +
N'@level1type = N''TABLE'', @level1name = N''' + TableName + N'''' +
CASE WHEN ColumnName IS NOT NULL
THEN N', @level2type = N''COLUMN'', @level2name = N''' + ColumnName + N''''
ELSE N''
END + N';' AS [SQL_Command_To_Run]
FROM DirtyDescriptions
ORDER BY [No];
