有两种解决办法
方法一、是我在网上找的:将原来的sysproperties改成sys.extended_properties并且对应关系如下
 sys.extended_properties
 left join sys.extended_properties g on a.id=g.class and
a.colid=g.minor_id
left join sys.extended_properties f on d.id=f.class and f.minor_id=0
2000的数据库附加不能05的数据库里出了sysproperties不存在
上面就是解决的方法,以后备用。
【sysproperties】表 原来【SQL2000】中的表【sysproperties】在【SQL2005】中已经不存在了,被是表【extended_properties】取代了。 能不出错吗?
微软公司在升级数据库版本的问题,怎么没有考虑到程序员?
微软删除一个sysproperties表,不知道多少个基于【sysproperties】的程序要出问题。
所以基于上面的解决办法,我找到了
第二个方法,相对比较简单
建一个视图:
 CREATE VIEW sysproperties
 AS
  SELECT class AS id,Minor_id AS sMallid,* from sys.extended_properties
这样以前写的代码 在找不到表的情况下就会用这个视图。
暂时貌似可以解决问题
举一个列子如下:修改后一样可以在2005中运行:
  --查询所有用户表所有字段的特征
 SELECT D.Name as TableName, A.colorder AS ColOrder, A.name AS Name,  
   COLUMNPROPERTY(A.ID,A.Name, 'IsIdentity') AS IsIdentity,  
   CASE WHEN EXISTS
   (SELECT 1
   FROM dbo.sysobjects
   WHERE Xtype = 'PK' AND Name IN
   (SELECT Name
   FROM sysindexes
   WHERE indid IN
   (SELECT indid
   FROM sysindexkeys
   WHERE ID = A.ID AND colid = A.colid)))  
   THEN 1 ELSE 0 END AS 主键,  
   B.name AS 类型,
   A.length AS [长度],
   A.xprec AS [精度],
   A.xscale AS [小数],
   CASE WHEN A.isnullable = 1 THEN 1 ELSE 0 END AS [可为空],  
 ISNULL(E.text, ' ') AS [默认值],  
   ISNULL(G.[value], ' ') AS [说明]
 FROM dbo.syscolumns A LEFT OUTER JOIN
   dbo.systypes B ON A.xtype = B.xusertype INNER JOIN
   dbo.sysobjects D ON A.id = D.id AND D.xtype = 'U' AND  
   D.name <> 'dtproperties' LEFT OUTER JOIN
   dbo.syscomments E ON A.cdefault = E.id 
   LEFT OUTER JOIN dbo.sysproperties G ON A.id = G.id AND A.colid = G.smallid
 --WHERE D.Name='tablename' --如果找指定表,把注释去掉
 ORDER BY 1, 2
上面是 在2000中运行的效果,正确,没问题
下面是利用【sys.extended_properties】的效果,用网上找的方法,可行
 --查询所有用户表所有字段的特征
 SELECT D.Name as TableName, A.colorder AS ColOrder, A.name AS Name,  
   COLUMNPROPERTY(A.ID,A.Name, 'IsIdentity') AS IsIdentity,  
   CASE WHEN EXISTS
   (SELECT 1
   FROM dbo.sysobjects
   WHERE Xtype = 'PK' AND Name IN
   (SELECT Name
   FROM sysindexes
   WHERE indid IN
   (SELECT indid
   FROM sysindexkeys
   WHERE ID = A.ID AND colid = A.colid)))  
   THEN 1 ELSE 0 END AS 主键,  
   B.name AS 类型,
   A.length AS [长度],
   A.xprec AS [精度],
   A.xscale AS [小数],
   CASE WHEN A.isnullable = 1 THEN 1 ELSE 0 END AS [可为空],  
 ISNULL(E.text, ' ') AS [默认值],  
   ISNULL(G.[value], ' ') AS [说明]
 FROM dbo.syscolumns A LEFT OUTER JOIN
   dbo.systypes B ON A.xtype = B.xusertype INNER JOIN
   dbo.sysobjects D ON A.id = D.id AND D.xtype = 'U' AND  
   D.name <> 'dtproperties' LEFT OUTER JOIN
   dbo.syscomments E ON A.cdefault = E.id 
 left join sys.extended_properties g 
 on a.id=g.class and 
 a.colid=g.minor_id
 left join sys.extended_properties f on d.id=f.class and f.minor_id=0
 WHERE D.Name='tablename' --如果找指定表,把注释去掉
 ORDER BY 1, 2
另外我在 sql2005中建立视图 :
 CREATE VIEW sysproperties
 AS
  SELECT class AS id,Minor_id AS sMallid,* from sys.extended_properties
后再执行第一个不经过修改用【sysproperties】的代码也能正常运行。
