PowerDesigner 16 sql server 2008 生成備註報“對象名 'sysproperties' 無效”解決辦法。

從網上找了一段生成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%
]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章