DBobjectsCompareScript(数据库对象比较).sql
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的更多相关文章
- 一些求数据库对象的SQL语句
use [mydb] go --存储过程 SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_type='PROCEDURE' AND SP ...
- Sql Server系列:数据库对象
数据库对象是数据库的组成部分,数据表.视图.索引.存储过程以及触发器等都是数据库对象. 数据库的主要对象是数据表,数据表是一系列二维数组的集合,用于存储各种信息. 视图表面上看与表几乎一样,具有一组命 ...
- SQL Server修改数据库对象所有者(Owner)浅析
在SQL Server数据库中如何修改数据库对象(表.视图.存储过程..)的所有者(Owner)呢?一般我们可以使用系统提供的系统存储过程sp_changeobjectowner来修改. 我们先看看s ...
- (二)sql入门 管理数据库对象
在数据库里,有各种各样的对象,除了最常见的表之外,还有诸如视图.索引等数据库对象. 这些对象,在数据库里需要有人来管理,那么谁来管理呢?当然是数据库的使用者了.每个使用者相对于数据库里有一片区域,称为 ...
- C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例
Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...
- 查询Sql Server数据库对象结构
查询Sql Server数据库对象结构 查询数据库 查询架构 查询表 查询列 查询存储过程 查询视图 1.查询某一服务器下所有数据库 select t.[name] as 数据库 from sys.d ...
- SQL Server 数据库对象命名参考
一. 引言 编码规范是一个优秀程序员的必备素质,然而,有很多人非常注重程序中变量.方法.类的命名,却忽视了同样重要的数据库对象命名.这篇文章结合许多技术文章和资料,以及我自己的开发经验,对数据库对象的 ...
- SQL Server IF Exists 判断数据库对象是否存在的用法
1 判断数据库是否存在Sql代码 if exists (select * from sys.databases where name = ’数据库名’) drop database [数据库名] ...
- 基于Python的SQL Server数据库对象同步轻量级实现
缘由 日常工作中经常遇到类似的问题:把某个服务器上的某些指定的表同步到另外一台服务器.类似需求用SSIS或者其他ETL工作很容易实现,比如用SSIS的话就可以,但会存在相当一部分反复的手工操作.建源的 ...
- MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象
我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...
随机推荐
- C# 文章导航
1. C#相关文章 1.1 C# 基础(一) 访问修饰符.ref与out.标志枚举等等 1.2 C# 基础(二) 类与接口 1.3 C# DateTime日期格式化 1.4 C# DateTime与时 ...
- 札记:Fragment基础
Fragment概述 在Fragment出现之前,Activity是app中界面的基本组成单位,值得一提的是,作为四大组件之一,它是需要"注册"的.组件的特性使得一个Activit ...
- TODO:Laravel 使用blade标签布局页面
TODO:Laravel 使用blade标签布局页面 本文主要介绍Laravel的标签使用,统一布局页面.主要用到到标签有@yield,@ stack,@extends,@section,@stop, ...
- 使用UIBezierPath绘制图形
当需要画图时我们一般创建一个UIView子类, 重写其中的drawRect方法 再drawRect方法中利用UIBezierPath添加画图 UIBezierPath的使用方法: (1)创建一个Bez ...
- Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...
- 对Thoughtworks的有趣笔试题实践
记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...
- GJM : C#设计模式汇总整理——导航 【原创】
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- Linux 入门之网络配置
查看网络状态 ifconfig 修改网络参数 实验环境centos6.5,其他系统自行百度 ls /etc/sysconfig/network-scripts 显示所有文件, vi /etc/sysc ...
- React-Native 组件开发方法
前言 React Native的开发思路是通过组合各种组件来组织整个App,在大部分情况下通过组合View.Image等几个基础的组件,可以非常方便的实现各种复杂的跨平台组件,不过在需要原生功能支持. ...
- 从EF的使用中探讨业务模型能否脱离单一存储层完全抽象存在
上次赶时间,就很流水账地写了上次项目对EF的一次实践应用模式,因为太长了,也没能探讨太多,所以再继续扩展. 这次想探讨的是,实体,如果作为类似于领域模型的业务模型存在,它的数据能否来自不同的数据源.这 ...