PowerDesigner 逆向工程/產生資料庫腳本時,預設範本未包含欄位說明(MS_Description 擴充屬性),導致產出的 CREATE TABLE 腳本缺少 sp_addextendedproperty 呼叫。需自訂 DBMS 範本修正。
sqlsv2k8.xdb)。p.value 取得擴充屬性):
{OWNER, TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY, DOMAIN, DEFAULT, ExtIdentitySeedInc, COMMENT, COLNNAME, ExtCollation, ExtIdtNotForReplication, ExtDeftConstName, ExtRowGuidCol}
SELECT
u.name,
o.name,
c.column_id,
c.name,
CASE WHEN c.system_type_id IN (165,167,231) AND c.max_length = -1 THEN t.name + '(Max)' ELSE t.name END,
c.precision,
CASE c.max_length WHEN -1 THEN 0 ELSE CASE WHEN c.system_type_id IN (99,231,239) THEN c.max_length/2 ELSE c.max_length END END AS colnA,
c.scale,
CASE c.is_computed WHEN 1 THEN CONVERT(VARCHAR(8000), (SELECT z.definition FROM [%CATALOG%.]sys.computed_columns z WHERE z.object_id = c.object_id AND z.column_id = c.column_id)) ELSE '' END AS colnB,
CASE c.is_nullable WHEN 1 THEN 'NULL' ELSE 'NOTNULL' END,
CASE c.is_identity WHEN 1 THEN 'identity' ELSE '' END,
CASE WHEN c.user_type_id <> c.system_type_id THEN (SELECT d.name FROM [%CATALOG%.]sys.types d WHERE d.user_type_id = c.user_type_id) ELSE '' END AS colnC,
CONVERT(VARCHAR(8000), d.definition),
CASE c.is_identity WHEN 1 THEN CONVERT(VARCHAR, i.seed_value) + ', ' + CONVERT(VARCHAR, i.increment_value) ELSE '' END AS colnD,
CONVERT(VARCHAR(8000), ep.value), -- ★ 新增:欄位說明 (MS_Description)
CONVERT(VARCHAR(8000), ep.value), -- ★ 新增:對應模板 COMMENT 欄位
c.collation_name,
CASE i.is_not_for_replication WHEN 1 THEN 'true' ELSE 'false' END,
dc.name,
CASE c.is_rowguidcol WHEN 1 THEN 'true' ELSE 'false' END
FROM [%CATALOG%.]sys.columns c
JOIN [%CATALOG%.]sys.objects o ON o.object_id = c.object_id
JOIN [%CATALOG%.]sys.schemas u ON u.schema_id = o.schema_id
JOIN [%CATALOG%.]sys.types t ON t.user_type_id = c.system_type_id
LEFT OUTER JOIN [%CATALOG%.]sys.identity_columns i ON i.object_id = c.object_id AND i.column_id = c.column_id
LEFT OUTER JOIN [%CATALOG%.]sys.default_constraints dc ON dc.object_id = c.default_object_id
LEFT OUTER JOIN [%CATALOG%.]sys.extended_properties ep ON ep.major_id = o.object_id AND ep.minor_id = c.column_id AND ep.class = 1
WHERE o.type IN ('U','S','V')
[ AND u.name = %.q:OWNER%]
[ AND o.name = %.q:TABLE%]
ORDER BY 1, 2, 3
ep.value:對應模板標記 COMMENT 與 COLNNAME(視具體模板定義),使產生腳本時包含 sp_addextendedproperty 'MS_Description', '說明文字', 'SCHEMA', 'dbo', 'TABLE', 'TableName', 'COLUMN', 'ColName'。class = 1 代表 COLUMN 級屬性,major_id = object_id、minor_id = column_id。SQL Server 2005 With Comment.xdb)。EXEC sp_addextendedproperty ... 'MS_Description' ...。若需同步產生資料表說明,請在 Script → Objects → Table → SqlListQuery 中同樣加入 sys.extended_properties JOIN(class = 1, minor_id = 0),並對應模板 COMMENT 欄位。
PowerDesigner 透過自訂 DBMS 範本、修改 SqlListQuery 查詢加入 sys.extended_properties,即可在產生 SQL Server 2005/2008 DDL 腳本時自動包含欄位/資料表說明,大幅提升資料字典維護效率。