PowerDesigner12.5修改数据库时,出现“对象无效。不允许有扩展属性,或对象不存在。SQLSTATE=37000” 的问题

PowerDesigner12.5修改数据库时,出现“对象无效。不允许有扩展属性,或对象不存在。SQLSTATE=37000” 的问题,如图所示:

 

 

在网上搜索了一下解决方法有两种:

方法1

原因: 系统函数sp_addextendedproperty 的第四个参数(用户名) 不能为空。但PD在生成的时候却是’’ (空字符串)

解决方法:

在PDM时,DataBase>> Edit Current DBMS >> Script >> Object >> Column>> ColumnComment

在value 栏中默认值是:

[%R%?[exec ]][execute ]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%


修改后的ColumnComment 如下:(红色为修改的地方)

declare @Cmt%TABLE% varchar(128)

select @Cmt%TABLE% = user_name()

[%R%?[exec ]][execute ]sp_addextendedproperty[%R%?[N]]'MS_Description',

[%R%?[N]]%.q:COMMENT%,

%R%?[N]]'user', [%R%?[N]]@Cmt%TABLE%, [%R%?[N]]'table', [%R%?[N]]%.q:TABLE%,

[%R%?[N]]'column', [%R%?[N]]%.q:COLUMN%

结果说出来了,那么我们来分析下,里面具体的参数:

修改前对应生成的脚本,如下:

execute sp_addextendedproperty 'MS_Description',

'管理员名称', 'user', '', 'table', 'Admin','column', 'Ad_Name'

Go

 

我们来分析下,每项内容对应的是什么:

'MS_Description'   指定调用的扩展属性存储过程'MS_Description'

%.q:COMMENT%        扩展属性的value(就是Column属性的Name)

'user'                               固定的字符串’user’

''                                       这里本应该是用户名,但因为设定问题,这里没有出现. SQL语句的执行异常,就在这里

'Table'                             级别 1 对象的类型。

'Admin'                                  级别 1 对象的名称。

'Column’                        级别 2 对象的类型。

'Ad_Name’                           级别 2 对象的名称。

找到了问题所在.就好办了.

细心的同学会发现. 如果,给Table添加扩展属性MS_Description,则 在运行PD生成的脚本时,不会出问题.那它是怎么处理的呢. 我们可以参考下Table的写法.再来修改Column.

TableComment地址(与ColumnComment类似):

当PDM时。DataBase >>Edit Current DBMS >> Script >> Object >> Table >>TableComment

 

在与Column扩展属性SQL 脚本的对比中.我们不难发现.Table的脚本中多了几句获取用户名的T-SQL脚本.

declare @CmtAdmin varchar(128)

select @CmtAdmin = user_name()

那,找到对应的PD参数,再修改到ColumnComment 中,就可以了.

最终,修改后的ColumnComment 如下:

declare @Cmt%TABLE% varchar(128)

select @Cmt%TABLE% = user_name()

[%R%?[exec ]][execute ]sp_addextendedproperty[%R%?[N]]'MS_Description',

[%R%?[N]]%.q:COMMENT%,

%R%?[N]]'user', [%R%?[N]]@Cmt%TABLE%, [%R%?[N]]'table',[%R%?[N]]%.q:TABLE%,

[%R%?[N]]'column', [%R%?[N]]%.q:COLUMN%

PDM时。DataBase >> Edit Current DBMS>> Script >> Object >> Table >> TableComment

生成后,

declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description', 
   '编号',
   'user', @CurrentUser, 'table', 'TJ_RESEARCHPARA', 'column', ID
出错:

消息 15135,级别 16,状态 2,过程 sp_addextendedproperty,第 38 行
对象无效。'bsbak.TJ_RESEARCHPARA.YYBH'不允许有扩展属性,或对象不存在。

改为:

execute sp_addextendedproperty 'MS_Description', 
   '编号',
   'user', 'dbo', 'table', 'TJ_RESEARCHPARA', 'column', ID

相关地址:http://www.cnblogs.com/ATree/archive/2010/07/12/PowerDesigner-MS_Description.html 

――――――――――――――――――――――――――――――――――――――――

以上是在网上摘抄的,但我用的是PowerDesigner 12.5,按照同样的方法查看,上面的修改本身就有,也就是不用再手动修改,所以问题仍然没有解决。

 

方法2

用PowerDesigner生成注释要注意的问题

错误信息:服务器: 消息 15135,级别 16,状态 1,过程sp_validatepropertyinputs,行 100. 对象无效。不允许在 '.cash_flux' 上使用扩展属性,或对象不存在。

在使用PowerDesigner11.0设计数据库时,没有为表指定Owner,于是出现了上述错误,因为我需要为表和

字段生成注释,如下:

execute sp_addextendedproperty'MS_Description',

   '客户-现金流量表',

  'user', '', 'table', 'cash_flux'

go

在执行存储过程sp_addextendedproperty时需要调用存储过程sp_validatepropertyinputs来验证其参数是否有效,所以在设计数据库时最好为表指定其Owner 为dbo

――――――――――――――――――――――――――――――――――――――

按照同样的方法仍然没有解决。

 

方法3:我的解决方法

本人试了几次后发现,用PowerDesigner修改/生成我本机SQL Server的数据库时就不会出错误提示,生成正式服务器上SQL Server时就会出错误提示,这样就确认不是PowerDesigner本身的问题,那大概应该是操作正式服务的用户权限不够了?经测试,果然是用户权限不够,调了操作正式服务器的用户权限后,就不会出现错误提示,至些,问题得到解决。

posted @ 2010-08-12 18:24  YShuLin  阅读(3290)  评论(0编辑  收藏  举报