use master

go
IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[func_CompareDBobjectsReColumns_Temp]') AND xtype in (N'FN', N'IF', N'TF'))
DROP FUNCTION [func_CompareDBobjectsReColumns_Temp]

go
create function [func_CompareDBobjectsReColumns_Temp](@objectID int)
returns varchar(1000)
as
begin
    declare @str varchar(1000)
    set @str = ''
    select @str = @str + ', ' + A.name + ' ' + B.name +
    case when B.name in('int','datetime') then ''
    when B.name in('varchar','nvarchar') then '(' + cast(A.length as varchar) +')'
    else ' ' end
    --zzl
    from syscolumns A, systypes B
    where A.xtype = B.xtype and id = @objectID
   
     if(len(@str)) > 0
     begin
  set @str = ltrim(rtrim(@str))
  set @str = right(@str , len(@str) - 1)
  end
    return ltrim(rtrim(@str))
end
go

declare @sqlStr nvarchar(4000),@dbCurrent nvarchar(20),@dbOK nvarchar(20),@db nvarchar(20)
 
 set @dbOK = 'UBIQTomb_Test0819'
 set @db = 'UBIQTomb'
 
 if not exists(select   1   from   master..sysdatabases   where   name= @dbOK)
 begin
      print   '不存在存在数据库名:'+ @dbOK
      return;
     end
    
 if not exists(select   1   from   master..sysdatabases   where   name= @db)
 begin
      print   '不存在存在数据库名:'+ @db
      return;
     end

select @dbCurrent = db_name()
 
 --不存在的表 
 set @sqlStr = 'select * into #tableOK from '+@dbOK+'..sysobjects where xtype=''U'';'
 set @sqlStr = @sqlStr+ 'select * into #tableCurrent from '+@db+'..sysobjects where xtype=''U'';'
 set @sqlStr = @sqlStr+ 'select +''create table ''+ name +''(''+ '+@dbCurrent+'.dbo.func_CompareDBobjectsReColumns_Temp(id) +'')''  as 表不存在 from #tableOK where name not in(select name from #tableCurrent);'
 
 --不存在的列
 set @sqlStr = @sqlStr + ' select A.name as ColumnName,B.name as DataType, A.length as DataLen, C.name as TableName into #cloumnsOK '
        + ' from '+@dbOK+'..syscolumns A, '+@dbOK+'..systypes B, '+@dbOK+'..sysobjects C'
        + ' where A.xtype = B.xtype and A.id = C.id and C.xtype=''U'' and B.name != ''sysname'' and C.name in(select name from #tableOK) and C.name in(select name from #tableCurrent);'     
 set @sqlStr = @sqlStr + ' select A.name as ColumnName,B.name as DataType, A.length as DataLen, C.name as TableName, A.id as TableID  into #cloumnsCurrent '
        + ' from '+@db+'..syscolumns A, '+@db+'..systypes B, '+@db+'..sysobjects C'
        + ' where A.xtype = B.xtype and A.id = C.id and C.xtype=''U'' and B.name != ''sysname'' and C.name in(select name from #tableOK) and C.name in(select name from #tableCurrent);' 
 set @sqlStr = @sqlStr+ ' select +''alter table ''+ TableName +'' add ''+ ColumnName +'' ''+DataType+'
   +'+ case when DataType in(''int'',''datetime'') then '''' when DataType in(''varchar'',''nvarchar'',''char'',''nchar'') then ''('' + cast(DataLen as varchar) +'')'' else '' '' end as 不存在的列'
   +' from #cloumnsOK where ColumnName not in(select ColumnName from #cloumnsCurrent where #cloumnsCurrent.TableName = #cloumnsOK.TableName);'

--数据类型不正确,或者数据长度不正确
 set @sqlStr = @sqlStr+ ' select +''alter table ''+ TableName +'' alter column ''+ ColumnName +'' ''+DataType+'
   +'+ case when DataType in(''int'',''datetime'') then '''' when DataType in(''varchar'',''nvarchar'',''char'',''nchar'') then ''('' + cast(DataLen as varchar) +'')'' else '' '' end as 数据类型不正确或者数据长度不正确'
   +' from #cloumnsOK where DataType + cast(DataLen as varchar) not in(select DataType + cast(DataLen as varchar) from #cloumnsCurrent where #cloumnsCurrent.TableName = #cloumnsOK.TableName and #cloumnsCurrent.ColumnName = #cloumnsOK.ColumnName)'
   +' and TableName + ColumnName in(select TableName + ColumnName from #cloumnsCurrent)'
 exec sp_executesql @sqlStr
 
 set @sqlStr = 'select B.name +''|''+ A.name as ''缺少自增长列的表'''
    +' from '+@dbOK+'..syscolumns A, '+@dbOK+'..sysobjects B   '
    +' where  A.id = B.id and A.typestat !=0 and A.colstat !=0 and B.xtype = ''U'''
    +' and B.name+A.name not in('
    +' select B.name + A.name '
    +' from '+@db+'..syscolumns A, '+@db+'..sysobjects B   '
    +' where  A.id = B.id and A.typestat !=0 and A.colstat !=0 and B.xtype = ''U'')'
 exec sp_executesql @sqlStr
    
 set @sqlStr = 'select B.name+''|''+A.name as ''缺少主键的表'''
   +' from '+@dbOK+'..syscolumns A, '+@dbOK+'..sysobjects B '
   +' where A.id = B.id and  A.id in(select id from '+@dbOK+'..sysconstraints) and A.colstat = 1 '
   +' and B.name+A.name not in('
   +' select B.name+A.name'
   +' from '+@db+'..syscolumns A, '+@db+'..sysobjects B '
   +' where A.id = B.id and  A.id in(select id from '+@db+'..sysconstraints) and A.colstat = 1 )'
 exec sp_executesql @sqlStr
   
 set @sqlStr = 'select name as ''缺少存储过程'' from  '+@dbOK+'..sysobjects where xtype = ''P'' '
  +' and name not in(select name from '+@db+'..sysobjects where xtype = ''P'')'  
 exec sp_executesql @sqlStr
 
 set @sqlStr = 'select name as ''缺少触发器'' from  '+@dbOK+'..sysobjects where xtype = ''TR'''
  +' and name not in(select name from '+@db+'..sysobjects where xtype = ''TR'')'  
 exec sp_executesql @sqlStr
 
 set @sqlStr = 'select name as ''缺少函数'' from  '+@dbOK+'..sysobjects where xtype = ''FN'''
  +' and name not in(select name from '+@db+'..sysobjects where xtype = ''FN'')'
 exec sp_executesql @sqlStr

set @sqlStr = 'select name as ''缺少视图'' from  '+@dbOK+'..sysobjects where xtype = ''V'''
  +' and name not in(select name from '+@db+'..sysobjects where xtype = ''V'')'
 exec sp_executesql @sqlStr

go
IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[func_CompareDBobjectsReColumns_Temp]') AND xtype in (N'FN', N'IF', N'TF'))
DROP FUNCTION [func_CompareDBobjectsReColumns_Temp]

DBobjectsCompareScript(数据库对象比较).sql的更多相关文章

  1. 一些求数据库对象的SQL语句

    use [mydb] go --存储过程 SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_type='PROCEDURE' AND SP ...

  2. Sql Server系列:数据库对象

    数据库对象是数据库的组成部分,数据表.视图.索引.存储过程以及触发器等都是数据库对象. 数据库的主要对象是数据表,数据表是一系列二维数组的集合,用于存储各种信息. 视图表面上看与表几乎一样,具有一组命 ...

  3. SQL Server修改数据库对象所有者(Owner)浅析

    在SQL Server数据库中如何修改数据库对象(表.视图.存储过程..)的所有者(Owner)呢?一般我们可以使用系统提供的系统存储过程sp_changeobjectowner来修改. 我们先看看s ...

  4. (二)sql入门 管理数据库对象

    在数据库里,有各种各样的对象,除了最常见的表之外,还有诸如视图.索引等数据库对象. 这些对象,在数据库里需要有人来管理,那么谁来管理呢?当然是数据库的使用者了.每个使用者相对于数据库里有一片区域,称为 ...

  5. C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例

    Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...

  6. 查询Sql Server数据库对象结构

    查询Sql Server数据库对象结构 查询数据库 查询架构 查询表 查询列 查询存储过程 查询视图 1.查询某一服务器下所有数据库 select t.[name] as 数据库 from sys.d ...

  7. SQL Server 数据库对象命名参考

    一. 引言 编码规范是一个优秀程序员的必备素质,然而,有很多人非常注重程序中变量.方法.类的命名,却忽视了同样重要的数据库对象命名.这篇文章结合许多技术文章和资料,以及我自己的开发经验,对数据库对象的 ...

  8. SQL Server IF Exists 判断数据库对象是否存在的用法

    1 判断数据库是否存在Sql代码 if exists (select * from sys.databases where name = ’数据库名’)    drop database [数据库名] ...

  9. 基于Python的SQL Server数据库对象同步轻量级实现

    缘由 日常工作中经常遇到类似的问题:把某个服务器上的某些指定的表同步到另外一台服务器.类似需求用SSIS或者其他ETL工作很容易实现,比如用SSIS的话就可以,但会存在相当一部分反复的手工操作.建源的 ...

  10. MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象

    我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...

随机推荐

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  3. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

  4. 关于Unity3D自定义编辑器的学习

    被人物编辑器折腾了一个月,最终还是交了点成品上去(还要很多优化都还么做).  刚接手这项工作时觉得没概念,没想法,不知道.后来就去看<<Unity5.X从入门到精通>>中有关于 ...

  5. 奇异值分解(SVD)原理与在降维中的应用

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...

  6. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  7. 本人提供微软系.NET技术顾问服务,欢迎企业咨询!

    背景: 1:目前微软系.NET技术高端人才缺少. 2:企业很难直接招到高端技术人才. 3:本人提供.NET技术顾问,保障你的产品或项目在正确的技术方向. 技术顾问服务 硬服务项: 1:提供技术.决策. ...

  8. app开发外包注意事项,2017最新资讯

    我们见过很多创业者,栽在这app外包上.很多创业者对于app外包这件事情不是特别重视,以为将事情交给app外包公司就完事了,实际上不是的.无论是从选择app外包公司还是签订合同.售后维护等各方面都有许 ...

  9. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  10. (转)从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    原文地址:  http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集 ...