從網上找了一段生成sql備註的腳本,腳本如下:
Option Explicit
ValidationMode = True
InteractiveMode = im_Batch
Dim mdl ' the current model
' get the current active model
Set mdl = ActiveModel
If (mdl Is Nothing) Then
MsgBox "There is no current Model "
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
MsgBox "The current model is not an Physical Data model. "
Else
ProcessFolder mdl
End If
' This routine copy name into comment for each table, each column and each view
' of the current folder
Private sub ProcessFolder(folder)
Dim Tab 'running table
for each Tab in folder.tables
if not tab.isShortcut then
tab.comment = tab.name
Dim col ' running column
for each col in tab.columns
col.comment= col.name
next
end if
next
Dim view 'running view
for each view in folder.Views
if not view.isShortcut then
view.comment = view.name
end if
next
' go into the sub-packages
Dim f ' running folder
For Each f In folder.Packages
if not f.IsShortcut then
ProcessFolder f
end if
Next
end sub
上面這段腳在 PowerDesigner 15上沒有問題,可是到了PowerDesinger 16上就出現在問題了。
在PowerDesinger 16上生成出來的腳本里有多了東西,就是加了一個判斷,如果備註已經存在,就刪除這個判斷,在對其進行判斷的時候,用到了sysproperties這表表,可是在sql server 2008 裏面沒有(sql server 2005裏也好像沒有)。
if exists (select 1
from sysproperties
where id = object_id('T_PRI_CarLimitPriceCache')
and type = 3)
begin
declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_dropextendedproperty 'MS_Description',
'user', @CurrentUser, 'table', 'T_PRI_CarLimitPriceCache'
end
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'限價設定數據緩存',
'user', @CurrentUser, 'table', 'T_PRI_CarLimitPriceCache'
go
if exists (select 1
from sys.properties
where id = object_id('T_PRI_CarLimitPriceCache')
and type = 4)
begin
declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_dropextendedproperty 'MS_Description',
'user', @CurrentUser, 'table', 'T_PRI_CarLimitPriceCache', 'column', 'MarketCode'
end
那PowerDesinger 15裏生成的腳本如下:
declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sys.sp_addextendedproperty 'MS_Description',
'限價設定數據緩存',
'user', @CurrentUser, 'table', 'T_PRI_CarLimitPriceCache'
go
declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'店面編碼',
'user', @CurrentUser, 'table', 'T_PRI_CarLimitPriceCache', 'column', 'MarketCode'
go
爲什麼會這樣呢?最後查看了 PowerDesinger 16 與 PowerDesinger 15裏面的 TableComment 和 ColumnComment 裏內腳本不一樣導至生成的出來的腳本不同。
在網上找了一下發生sql server 2008 數據庫裏沒有 sysproperties這個表,所在執行生成 PowerDesigner 16生成出來的的腳本出現下圖所錯誤
現在有二個方法可以解決這個問題,那就是把 PowerDesigner 15裏面TableComment和ColumnComment的腳本放到 PowerDesigner 16裏面生成出來看腳本就像15一樣,在執行的時候也就出報上面的錯誤了。
第二個方法就是修改PowerDesigner 16裏面的腳本內容。
表:
列:
修改完了之後,生成的SQL腳本如下:
if exists (select 1
from sys.extended_properties
where major_id = object_id('T_PRI_CarLimitPriceCache')
and minor_id = 0)
begin
declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_dropextendedproperty 'MS_Description',
'user', @CurrentUser, 'table', 'T_PRI_CarLimitPriceCache'
end
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'限價設定數據緩存',
'user', @CurrentUser, 'table', 'T_PRI_CarLimitPriceCache'
go
if exists (select 1
from sys.extended_properties
where major_id= object_id('T_PRI_CarLimitPriceCache')
and value = '店面編碼')
begin
declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_dropextendedproperty 'MS_Description',
'user', @CurrentUser, 'table', 'T_PRI_CarLimitPriceCache', 'column', 'MarketCode'
end
再執行的時候就不會報 [對象名 'sysproperties' 無效。]這個錯誤了。
現在把PowerDesigner 15裏的TableComment 和 ColumnComment裏的內容貼出來。
-------------------------TableComment-----------------------------------
[%OWNER%?[.O:[execute ][exec ]][sys.]sp_addextendedproperty [%R%?[@%S%=][N]]'MS_Description',
[%R%?[@%S%=][N]]%.q:COMMENT%,
[%R%?[@%S%=][N]]'[.O:[user][schema]]', [%R%?[@%S%=][N]]%.q:OWNER%, [%R%?[@%S%=][N]]'table', [%R%?[@%S%=][N]]%.q:TABLE%
:declare @CurrentUser sysname
select @CurrentUser = user_name()
[.O:[execute ][exec ]][sys.]sp_addextendedproperty [%R%?[@%S%=][N]]'MS_Description',
[%R%?[@%S%=][N]]%.q:COMMENT%,
[%R%?[@%S%=][N]]'user', [%R%?[@%S%=][N]]@CurrentUser, [%R%?[@%S%=][N]]'table', [%R%?[@%S%=][N]]%.q:TABLE%
]
-------------------------ColumnComment----------------------------------
[%OWNER%?[.O:[execute ][exec ]]sp_addextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]%.q:COMMENT%,
[%R%?[N]]'user', [%R%?[N]]%.q:OWNER%, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%, [%R%?[N]]'column', [%R%?[N]]%.q:COLUMN%
:declare @CurrentUser sysname
select @CurrentUser = user_name()
[.O:[execute ][exec ]]sp_addextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]%.q:COMMENT%,
[%R%?[N]]'user', [%R%?[N]]@CurrentUser, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%, [%R%?[N]]'column', [%R%?[N]]%.q:COLUMN%
]
修改後的PowerDesigner 16裏TableComment 和 ColumnComment裏的內容貼出來。
---------------------------------TableComment------------------------------
[if exists (select 1
from sys.extended_properties
where major_id = object_id('[%QUALIFIER%]%TABLE%')
and minor_id = 0)
begin
[%OWNER%?[.O:[execute ][exec ]]sp_dropextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]'user', [%R%?[N]]%.q:OWNER%, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%
:declare @CurrentUser sysname
select @CurrentUser = user_name()
[.O:[execute ][exec ]]sp_dropextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]'user', [%R%?[N]]@CurrentUser, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%
]
end
][%OWNER%?[.O:[execute ][exec ]]sp_addextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]%.q:COMMENT%,
[%R%?[N]]'user', [%R%?[N]]%.q:OWNER%, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%
:select @CurrentUser = user_name()
[.O:[execute ][exec ]]sp_addextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]%.q:COMMENT%,
[%R%?[N]]'user', [%R%?[N]]@CurrentUser, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%
]
---------------------------------ColumnComment-----------------------------
[if exists (select 1
from sys.extended_properties
where major_id= object_id('[%QUALIFIER%]%TABLE%')
and value = [%R%?[N]]%.q:COMMENT%)
begin
[%OWNER%?[.O:[execute ][exec ]]sp_dropextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]'user', [%R%?[N]]%.q:OWNER%, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%, [%R%?[N]]'column', [%R%?[N]]%.q:COLUMN%
:declare @CurrentUser sysname
select @CurrentUser = user_name()
[.O:[execute ][exec ]]sp_dropextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]'user', [%R%?[N]]@CurrentUser, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%, [%R%?[N]]'column', [%R%?[N]]%.q:COLUMN%
]
end
][%OWNER%?[.O:[execute ][exec ]]sp_addextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]%.q:COMMENT%,
[%R%?[N]]'user', [%R%?[N]]%.q:OWNER%, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%, [%R%?[N]]'column', [%R%?[N]]%.q:COLUMN%
:select @CurrentUser = user_name()
[.O:[execute ][exec ]]sp_addextendedproperty [%R%?[N]]'MS_Description',
[%R%?[N]]%.q:COMMENT%,
[%R%?[N]]'user', [%R%?[N]]@CurrentUser, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%, [%R%?[N]]'column', [%R%?[N]]%.q:COLUMN%
]