團隊合作設計一套系統數據模型,創建了PDM后,Table、View、Store Procedure等都創建好了,且創建了多個Schema方便管理這些數據庫對象,但Table、view、Column等對象有Comment時(用來在團隊不同成員間共享描述信息)
生成數據庫時會得到一個提示"不支持擴展屬性,或對象不存在",分析發現異常在類似以下語句:
if exists(select 1 from sys.extended_properties p where p.major_id = object_id('Environment.Resource') and p.minor_id = (select c.column_id from sys.columns c where c.object_id = p.major_id and c.name = 'ResourceCode') ) begin execute sp_dropextendedproperty 'MS_Description', 'user', 'Environment', 'table', 'Resource', 'column', 'ResourceCode' end execute sp_addextendedproperty 'MS_Description', '資源編碼', 'user', 'Environment', 'table', 'Resource', 'column', 'ResourceCode' go
分析原因,發現是由於采用了Schema(上述代碼中的Environment),所以sp_addextendedproperty存儲過程的第三個參數就應該是SCHEMA而不是user。查詢相關資料發現以上SQL語句是基於Powerdesigner自帶的對應的.xdb文件生成的,如下圖是Column注釋信息的SQL代碼模板,對應的xdb模板文件存放在powerdesigner安裝路徑的Sybase\PowerDesigner 16\Resource Files\DBMS\sqlsv2012.xdb
如上圖,每個Column的Comment信息均通過以上代碼模板生成,所以只需要修改代碼模板(將sp_addextendedproperty的第三個參數值由user修改為schema即可)即可讓所有對象的Comment生成語句得到修正。
注:在win7以上系統中需要使用管理員權限運行powerdesigner才能將修改后的模板文件保存。