当前位置:首页 > 知道中心 > SQL Server > 文章

出现两个重名的dtproperties表

发表于:2013-08-27| 次阅读| 作者:藕码网
TAG:
摘要:出现两个重名的dtproperties表
客户的数据库表所有者用的是数据库名,而且数据库里有两个dtproperties表,在企业管理器中类型显示都是系统的,但所有者分别为数据库名和dbo两种,数据库名.dtproperties中含有客户需要的数据!现在要把数据从原数据库导入到另外的新数据库。注:SQL Server 2000中,当新建一个空的数据库后,在查询分析器中执行。
sp_database 或select * from sysobjects where xtype = 'U' 有可能得到dtproperties表,并显示为用户表,但是在企业管理器中,dtproperties却显示为系统表,网上解释为微软的bug。dtproperties表在企业管理器中无法删除;在对象浏览器中可以直接删除,或者执行drop table dtproperties语句删除。
    数据导到新数据库需要把所有者改为dbo,但如果数据库名.dtproperties表改为dbo.dtproperties,会与原有的dbo.dtproperties表重名,会报错!
解决方法:
    方法一:
    把数据导入新数据库后,直接把表的所有者改为新数据库名,这样就不会与系统的dbo.dtproperties表重名。注:此方法没有解决之前说的需要解决的问题,而且以后换到话还会再出现问题,尽量不要使用,不推荐。
    方法二:
    因为dtproperties表在查询分析器中显示为用户表,但是在企业管理器中,dtproperties却显示为系统表,所以在企业管理器里删除不了但在查询分析器中却可以删除,因此可以先把dbo.dtproperties删除后再批量修改所有者。测试是成功的,推荐此方法。
    方法三:
    因为表dbo.dtproperties中没有数据,而原数据库名.dtproperties表中有客户的需要的数据。我们可以把数据库名.dtproperties表中的数据导入dbo.dtproperties表中。这样我们就可以避免修改dtproperties表的所有者!【注】把一个表的数据导入到另一个表的方法:
Insert INTO 新表所有者.新表名(非自动增长字段,...) Select (非自动增长字段,...) FROM 数据库名.原表所有者.原表名;如果导入过程有报错:服务器: 消息 8101,级别 16,状态 1,行 1
仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'conrecled' 中为标识列指定显式值。则需要先执行SET IDENTITY_INSERT 新表名 ON,执行完导入语句后再执行SET IDENTITY_INSERT 新表名 off。


注:本站部分信息可能源于互联网分享,如有侵权,请告知,我们将及时删除!

  • 用户评论
  • 相关文章
  • 最新评论

    验证码:
  • 暂无关联文章