(原创,呕心沥血之作,强烈推荐)MS SQL新旧库数据字典比较脚本

原创 2006年05月30日 15:08:00

              /*MS SQL新旧库数据字典比较脚本*/

--注明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 PHP Generator(PHP脚本自动生成软件) v17.10.1官方版下载

软件名称:MS SQL PHP Generator(PHP脚本自动生成软件) v17.10.1官方版下载 MS SQL PHP Generator是一款功能强大的php脚本自动生成软件,可以...

ms sql 2005数据库创建快照脚本

  • 2014年09月10日 13:21
  • 85B
  • 下载

MS SQL执行大sql脚本文件时,提示“内存不足”

当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库。但是当数据库导出脚本很大,用Microsoft SQL Server Management Studio执行脚本时,往往会...

MS SQL数据导入MySQL

废话少说,将MS SQL 数据库的数据导出为txt,然后将txt导入到MySQL。两边数据库结构包括字段顺序要一样。 要点: 1、导出的文本中的字段的顺序要和MySQL里面字段的顺序一样。...

如何恢复在ms sql 数据库的企业管理器里误删除的数据

如何恢复在ms sql 数据库的企业管理器里误删除的数据   先用下面的数据恢复软件恢复被删除掉的数据库文件(*.mdf,*.ldf)  特别注意,任何对磁盘的操作,包括安装软件,都可能破坏已经删除的...
  • zwk_9
  • zwk_9
  • 2011年04月13日 16:18
  • 1893

MS SQL 监控数据/日志文件增长

前几天,在所有数据库服务器部署了监控磁盘空间的存储过程和作业后(MS SQL 监控磁盘空间告警),今天突然收到了两封告警邮件,好吧,存储规划是一方面,但是,是不是要分析一下是什么原因造成磁盘空间不足的...

0021 Ms SQL 2005 四个排名函数(row_number、rank、dense_rank 和 ntile)的比较

排名函数是 SQL Server 2005 新加的功能。在SQL Server 2005 中有如下四个排名函数:   1.row_number   2.rank   3.dense_rank ...

MS SQL数据导出Insert语句

  • 2008年06月08日 16:26
  • 300KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(原创,呕心沥血之作,强烈推荐)MS SQL新旧库数据字典比较脚本
举报原因:
原因补充:

(最多只允许输入30个字)