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

比较|脚本|数据

     /*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

时间: 2024-08-22 14:37:11

MS SQL新旧库数据字典比较脚本的相关文章

一个用来查看MS sql server表结构的一个脚本(本来打算用来剽窃的)

server|脚本 <%Set conn = Server.CreateObject("ADODB.Connection")conn.open "ODBC名","用户名","密码" Sql1="select * from dbo.sysobjects where type not in('S','D','K')"Sql1="select * from dbo.sysobjects where

当写的一个用来查看MS sql server表结构的一个脚本(本来打算用来剽窃的)

<%Set conn = Server.CreateObject("ADODB.Connection")conn.open "ODBC名","用户名","密码"Sql1="select * from dbo.sysobjects where type not in('S','D','K')"Sql1="select * from dbo.sysobjects where type ='U'&

Oracle数据库向MS Sql表结构及数据如何迁移?

问题描述 新来的经理三把火了,要我们把数据库改了,可是我们没有数据库迁移的经验,网上的博客都是模棱两可的.请教下各位大牛.Oracle数据库向MS Sql2000表结构及数据如何迁移?我们使用了DTS但是提示"未知错误",就不得不中断,请问数据库迁移还有别的办法吗?或者这种未知错误有解? 解决方案 参考http://www.sql-server-performance.com/2003/migrating-from-oracle-to-sql-server/我其实为吐槽来的.Oracl

贡献给大家php4下的MS SQL Server动态链接库

server|动态|链接 PHP Version 4.0b4pl1数据库连结只能使用ODBC和MySQL,没有提供MS SQL的动态库,为提高连结效率,本站编译了MSSQL的动态库,MSSQL的动态库是可以使用永久连结(mssql_pconnect )的.请试用者访问http://member.netease.com/~haioorhttp://haioweb.home.chinaren.com/download.html

【MS SQL】把多个数据库合并为一个新的数据库

原文:[MS SQL]把多个数据库合并为一个新的数据库 因应工作要求,需要把两个数据库合并成一个库: 一开始使用"导入数据.导出数据和复制数据库"三个工具时,没有达到要的效果.   后来,使用"生成脚本"来执行,成功!步骤如下: 1.新建一个空白库 -> SCM_KQYY:   2.选择要合并的数据库-> Materials:   3.这里不表,直接下一步:   4.按下图根据需要选择:表.存储过程.用户.同义词.   5.按下图设置,下一步:   6.

在Linux 下 访 问MS SQL Server 数 据 库(转载)

server 宁 波 保 税 区 官 委 会 计 算 中 心 董 保 华 ---- Linux 作 为 一 个 免 费 的Unix 类 操 作 系 统, 以 其 开 放 性 源 代 码. 多 任 务.X window 等 特 点 为 众 多 的 用 户 所 采 用, 并 有 很 多 企 业 采 用Linux 来 作 为 其 内 部 网 的 全 功 能 服 务 器(WWW,FTP,Email.DNS). 企 业 的 内 部 网 不 仅 要 提 供 文 本 信 息 的 访 问, 还 要 能 提 供

将MS SQL Server 2005 SP2整合到安装文件——脚本修正

刚入手新本本,一阵忙活,装好系统.小黑的驱动真不少,七七八八也有二三十个文件要下载.安装.轮到安装开发软件更是崩溃,一堆堆的sp等着我们打!微软留给我们的噩梦啊,所以,开始下载整合了SP补丁的软件,唯独没有找到SQL Server2005的整合版下载,只能自己动手,做个整合版了.网上一阵Google,见到园子里面这篇文章:将 MS SQL Server 2005 SP2 整合到安装文件,写的很不错,方法都有了,一看还有个脚本集成,很不错,可惜一执行下来,一堆错误,自己手动稍微调整了下,已经测试通

MS SQL基础教程:对象的SQL脚本

Enterprise Manager 提供了可视化的界面,在其中建立数据库及其对象,如表.视图.缺省值等,很少需要用户自己编辑程序代码.但对用户来说,了解这些对象是如何通过SQL语言建立,的并得到其SQL 语言脚本(Script) 是很有好处.的在Enterprise Manager 中提供了工具,以帮助用户产生这些对象的SQL 语言脚本. 生成对象的SQL 脚本方法如下: (1) 在Enterprise Manager 中选择要生成SQL 脚本的对象,单击右键,从快捷菜单中的"所有任务(All

MS SQL基础教程:SQL Server2000与Internet:支持Web应用的新特性

在今天的商务世界里网络变得越来越普遍,它渗透到生活的每个角落,从而对企业经营.组织.管理方式等产生巨大的影响.网络特性成为建立电子商务.互联网.企业内部网的基础.SQL Server 2000 就提供了显著增强的网络功能来构建数据库解决方案.利用这些网络特性,用户可以将企业数据以安全.快捷.高效的方式,通过Web 页发布给企业内部相关部门或发布给客户群体.因此,本章主要介绍SQL Server 2000 这些最新的网络特性及其应用. SQL Server 2000 具有完备的Web 功能,企业既