首页 >> sql >> 正文
MS SQL新旧库数据字典比较脚本
  来源:jz123 作者:疯狂书生 时间:2008-3-10  

--注明1:新旧库必须在同一数据库服务器同一实例中,最好以Sa身份登入。
--注明2:本脚本可作为系统升级改造,得到相关信息后作数据迁移之用。
declare @i int

set @i=4  /*注明3:1为要得到新库增加的数据字典信息;
                 2为要得到旧库多出的数据字典信息;
                 3为要得到新库增加的表的数据字典信息;
                 4为要得到旧库多出的表的数据字典信息 */
               

use temp  --打开旧库
SELECT sysobjects.name AS [table], CASE WHEN CAST(sysproperties.[value] AS varchar)
      IS NULL THEN '' ELSE CAST(sysproperties.[value] AS varchar) END AS 表说明,
      syscolumns.name AS field, CASE WHEN CAST(properties.[value] AS varchar) IS NULL
      THEN '' ELSE CAST(properties.[value] AS varchar) END AS 字段说明,
      systypes.name AS type, syscolumns.length,
      ISNULL(COLUMNPROPERTY(syscolumns.id, syscolumns.name, 'Scale'), 0)
      AS 小数位数, syscolumns.isnullable AS isnull,
      CASE WHEN syscomments.text IS NULL
      THEN '' ELSE syscomments.text END AS [Default],
      CASE WHEN COLUMNPROPERTY(syscolumns.id, syscolumns.name, 'IsIdentity')
      = 1 THEN '√' ELSE '' END AS 标识, CASE WHEN EXISTS
          (SELECT 1
         FROM sysobjects
         WHERE xtype = 'PK' AND name IN
                   (SELECT name
                  FROM sysindexes
                  WHERE indid IN
                            (SELECT indid
                           FROM sysindexkeys
                           WHERE id = syscolumns.id AND colid = syscolumns.colid)))
      THEN '√' ELSE '' END AS 主键 into #old
FROM syscolumns INNER JOIN
      sysobjects ON sysobjects.id = syscolumns.id INNER JOIN
      systypes ON syscolumns.xtype = systypes.xtype LEFT OUTER JOIN
      sysproperties properties ON syscolumns.id = properties.id AND
      syscolumns.colid = properties.smallid LEFT OUTER JOIN
      sysproperties ON sysobjects.id = sysproperties.id AND
      sysproperties.smallid = 0 LEFT OUTER JOIN
      syscomments ON syscolumns.cdefault = syscomments.id
WHERE (sysobjects.xtype = 'U')


use accdb --打开新库
SELECT sysobjects.name AS [table], CASE WHEN CAST(sysproperties.[value] AS varchar)
      IS NULL THEN '' ELSE CAST(sysproperties.[value] AS varchar) END AS 表说明,
      syscolumns.name AS field, CASE WHEN CAST(properties.[value] AS varchar) IS NULL
      THEN '' ELSE CAST(properties.[value] AS varchar) END AS 字段说明,
      systypes.name AS type, syscolumns.length,
      ISNULL(COLUMNPROPERTY(syscolumns.id, syscolumns.name, 'Scale'), 0)
      AS 小数位数, syscolumns.isnullable AS isnull,
      CASE WHEN syscomments.text IS NULL
      THEN '' ELSE syscomments.text END AS [Default],
      CASE WHEN COLUMNPROPERTY(syscolumns.id, syscolumns.name, 'IsIdentity')
      = 1 THEN '√' ELSE '' END AS 标识, CASE WHEN EXISTS
          (SELECT 1
         FROM sysobjects
         WHERE xtype = 'PK' AND name IN
                   (SELECT name
                  FROM sysindexes
                  WHERE indid IN
                            (SELECT indid
                           FROM sysindexkeys
                           WHERE id = syscolumns.id AND colid = syscolumns.colid)))
      THEN '√' ELSE '' END AS 主键 into #new
FROM syscolumns INNER JOIN
      sysobjects ON sysobjects.id = syscolumns.id INNER JOIN
      systypes ON syscolumns.xtype = systypes.xtype LEFT OUTER JOIN
      sysproperties properties ON syscolumns.id = properties.id AND
      syscolumns.colid = properties.smallid LEFT OUTER JOIN
      sysproperties ON sysobjects.id = sysproperties.id AND
      sysproperties.smallid = 0 LEFT OUTER JOIN
      syscomments ON syscolumns.cdefault = syscomments.id
WHERE (sysobjects.xtype = 'U') 


if @i=1
  begin
    select n.* --新库与旧库相比较后新库增加的数据字典信息
     from #new n left join #old o on n.[table]=o.[table] and n.field=o.field where o.[table] is null
    or o.field is null order by n.[table],n.field
  end
  else
   begin
     if @i=2
       begin
         select o.* --新库与旧库相比较后旧库多出的数据字典信息
          from #new n right join #old o on n.[table]=o.[table] and n.field=o.field where n.[table] is null
           or n.field is null order by o.[table],o.field
       end
       else
         begin
         if @i=3
           begin
             select * --新库与旧库相比较后新库增加的表的数据字典信息
             from #new where [table] <> all(select [table] from #old ) order by [table],field
           end
           else
             begin
              if @i=4
                begin
                  select * --新库与旧库相比较后旧库多出的表的数据字典信息
                  from #old where [table] <> all(select [table] from #new ) order by [table],field
                end
                else
                  begin
                    select '出错啦'
                  end    
             end    
         end   
   end

drop table #old
drop table #new


上一篇:MS SQL Server事务日志压缩与删除
下一篇:精通数据库系列之入门-基础篇

本篇新闻:MS SQL新旧库数据字典比较脚本

相关新闻
相关评论
 
评论表单加载中...
 
sql文章

 在Visual C++应

 编辑:admin

 时间:2008-3-10


   编程入门网-介绍.NET中的委派(Delegates)之三
   编程入门网-介绍.NET中的委派(Delegates)之二
   编程入门网-介绍.NET中的委派(Delegates)之一
   编程入门网-用Visual C#实现文件下载功能
   编程入门网-用C#写简单的CGI程式
最新文章
   编程入门网-介绍.NET中的委派(Delegates)之三
   编程入门网-介绍.NET中的委派(Delegates)之二
   编程入门网-介绍.NET中的委派(Delegates)之一
   编程入门网-用Visual C#实现文件下载功能
   编程入门网-用C#写简单的CGI程式
总站搜索
搜索
 
热门文章
   oracle数据库文件中的导入\导出
   用Oracle10g列值掩码技术隐藏敏感数据
   VB程序中用ADO对象动态创建数据库和表-VB.NET
   用VB6写简单程序 让电骡自动关机-VB.NET
   使用.NET2.0编写COM组件供VB调用-VB.NET
   VB.NET:键盘控制焦点移动-VB.NET
   用VB.NET绘制GDI图形-VB.NET
   vb.net中应用 ArrayList 实例-VB.NET
 
推荐文章
ASP.NET中的状态管理-ASP.NET
VC、IE、ASP环境下打印、预备的完美解决方案
oracle数据库文件中的导入\导出
VB.NET中快速访问注册表技巧-VB.NET
在vb中实现超连接的方法!和直接发邮件-VB.NET
用VB做realplayer播放列表-VB.NET
在VB.NET中如何实现和利用SortedLists-VB.NET
利用VB.NET Stopwatch对象记录时间-VB.NET
成都古羌科技有限公司版权所有: Copyright@2007-2010 ,ALL Rights Reserved 蜀ICP备07017240号