提个问:关于两个数据库之间的比较

Jessie_Zhang 2011-07-22 07:46:29
对MS SQL不熟,有点犯愁,说下需求,请大家帮帮忙,给点思路或方向或代码啊?

1)比较两个不同版本的数据库的表,视图和存储过程,一个是开发环境(如:DCD),一个是UAT环境(如DCD_UAT),如果在DCD里存在的表,视图和存储过程但是在DCD_UAT里不存在的话,列出表,视图,存储过程的名字。

2)如果两个DB都存在的表,视图和存储过程就比较他们的内容,把内空不同的列出来。
...全文
250 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
claro 2011-08-03
  • 打赏
  • 举报
回复
尽快发表。
Jessie_Zhang 2011-08-02
  • 打赏
  • 举报
回复
谢谢8楼,9楼的朋友,这个已经被一个朋友帮我做好了,有空我会贴到我的博客去~~问问朋友需不需要分后结贴。。。HOHO
唐诗三百首 2011-08-01
  • 打赏
  • 举报
回复

1)比较两个不同版本的数据库的表,视图和存储过程,一个是开发环境(如:DCD),
一个是UAT环境(如DCD_UAT),如果在DCD里存在的表,视图和存储过程但是在DCD_UAT里不存在的话,
列出表,视图,存储过程的名字。

-->
select a.name,a.xtype
from [DCD].dbo.sysobjects a
left join [UAT].dbo.sysobjects b
on a.name=b.name and a.xtype=b.xtype
where a.xtype in ('U','V','P') and b.name is null


2)如果两个DB都存在的表,视图和存储过程就比较他们的内容,把内空不同的列出来。

-->
这个不太现实,视图/存储过程/小型表的比较还好,
遇到大型表,逐个字段值的比对,性能消耗较大.建议合理降低要求.

Austindatabases 2011-08-01
  • 打赏
  • 举报
回复
若你想进行真正的数据库之间的比对,全方位,请你使用 redgate 的 data compare 8 or 9

请下载破解版本,它是目前比较好的,当然IDERA 也有类似产品,全方位的数据库比对工具
--小F-- 2011-08-01
  • 打赏
  • 举报
回复
*--数据结构比较 

比较两个数据库中的视图/存储过程的结构(结构比较,不是功能比较)

--邹建 2004.07(引用请保留此信息)--*/

/*--调用示例

--调用
exec p_compdb 'pubs','northwind'
--*/
create proc p_compdb
@db1 sysname, --第一个库
@db2 sysname --第二个库
as
exec('
select 类型=case isnull(a.xtype,b.xtype) when ''V'' then ''视图'' else ''存储过程'' end
,匹配情况=case
when a.name is null then ''库 ['+@db1+'] 中无''
when b.name is null then ''库 ['+@db2+'] 中无''
else ''结构不同'' end
,对象名称=isnull(a.name,b.name)
from(
select a.name,a.xtype,b.colid,b.text
from ['+@db1+']..sysobjects a,['+@db1+']..syscomments b
where a.id=b.id and a.xtype in(''V'',''P'') and a.status>=0
)a full join(
select a.name,a.xtype,b.colid,b.text
from ['+@db2+']..sysobjects a,['+@db2+']..syscomments b
where a.id=b.id and a.xtype in(''V'',''P'') and a.status>=0
)b on a.name=b.name and a.xtype=b.xtype and a.colid=b.colid
where a.name is null
or b.name is null
or isnull(a.text,'''') <>isnull(b.text,'''')
group by a.name,b.name,a.xtype,b.xtype
order by 类型,匹配情况,对象名称')
go


表结构比较:
-------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_comparestructure]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_comparestructure]
GO

/*--比较两个数据库的表结构差异

可以比较两个数据库的结构差异

--邹建 2003.9(引用请保留此信息)--*/

/*--调用示例

exec p_comparestructure '库1','库2'
--*/
create proc p_comparestructure
@dbname1 varchar(250),--要比较的数据库名1
@dbname2 varchar(250)--要比较的数据库名2
as
create table #tb1(表名1 varchar(250),字段名 varchar(250),序号 int,标识 bit,主键 bit,类型 varchar(250),
占用字节数 int,长度 int,小数位数 int,允许空 bit,默认值 sql_variant,字段说明 sql_variant)

create table #tb2(表名2 varchar(250),字段名 varchar(250),序号 int,标识 bit,主键 bit,类型 varchar(250),
占用字节数 int,长度 int,小数位数 int,允许空 bit,默认值 sql_variant,字段说明 sql_variant)

--得到数据库1的结构
exec('insert into #tb1 SELECT
表名=d.name,字段名=a.name,序号=a.colid,
标识=case when a.status=0x80 then 1 else 0 end,
主键=case when exists(SELECT 1 FROM '+@dbname1+'..sysobjects where xtype=''PK'' and parent_obj=a.id and name in (
SELECT name FROM '+@dbname1+'..sysindexes WHERE indid in(
SELECT indid FROM '+@dbname1+'..sysindexkeys WHERE id = a.id AND colid=a.colid
))) then 1 else 0 end,
类型=b.name,占用字节数=a.length,长度=a.prec,小数位数=a.scale,允许空=a.isnullable,
默认值=isnull(e.text,''''),字段说明=isnull(g.[value],'''')
FROM '+@dbname1+'..syscolumns a
left join '+@dbname1+'..systypes b on a.xtype=b.xusertype
inner join '+@dbname1+'..sysobjects d on a.id=d.id and d.xtype=''U'' and d.name <>''dtproperties''
left join '+@dbname1+'..syscomments e on a.cdefault=e.id
left join '+@dbname1+'..sysproperties g on a.id=g.id and a.colid=g.smallid
order by a.id,a.colorder')

--得到数据库2的结构
exec('insert into #tb2 SELECT
表名=d.name,字段名=a.name,序号=a.colid,
标识=case when a.status=0x80 then 1 else 0 end,
主键=case when exists(SELECT 1 FROM '+@dbname2+'..sysobjects where xtype=''PK'' and parent_obj=a.id and name in (
SELECT name FROM '+@dbname2+'..sysindexes WHERE indid in(
SELECT indid FROM '+@dbname2+'..sysindexkeys WHERE id = a.id AND colid=a.colid
))) then 1 else 0 end,
类型=b.name,占用字节数=a.length,长度=a.prec,小数位数=a.scale,允许空=a.isnullable,
默认值=isnull(e.text,''''),字段说明=isnull(g.[value],'''')
FROM '+@dbname2+'..syscolumns a
left join '+@dbname2+'..systypes b on a.xtype=b.xusertype
inner join '+@dbname2+'..sysobjects d on a.id=d.id and d.xtype=''U'' and d.name <>''dtproperties''
left join '+@dbname2+'..syscomments e on a.cdefault=e.id
left join '+@dbname2+'..sysproperties g on a.id=g.id and a.colid=g.smallid
order by a.id,a.colorder')
--and not exists(select 1 from #tb2 where 表名2=a.表名1)
select 比较结果=case when a.表名1 is null and b.序号=1 then '库1缺少表:'+b.表名2
when b.表名2 is null and a.序号=1 then '库2缺少表:'+a.表名1
when a.字段名 is null and exists(select 1 from #tb1 where 表名1=b.表名2) then '库1 ['+b.表名2+'] 缺少字段:'+b.字段名
when b.字段名 is null and exists(select 1 from #tb2 where 表名2=a.表名1) then '库2 ['+a.表名1+'] 缺少字段:'+a.字段名
when a.标识 <>b.标识 then '标识不同'
when a.主键 <>b.主键 then '主键设置不同'
when a.类型 <>b.类型 then '字段类型不同'
when a.占用字节数 <>b.占用字节数 then '占用字节数'
when a.长度 <>b.长度 then '长度不同'
when a.小数位数 <>b.小数位数 then '小数位数不同'
when a.允许空 <>b.允许空 then '是否允许空不同'
when a.默认值 <>b.默认值 then '默认值不同'
when a.字段说明 <>b.字段说明 then '字段说明不同'
else '' end,
*
from #tb1 a
full join #tb2 b on a.表名1=b.表名2 and a.字段名=b.字段名
where a.表名1 is null or a.字段名 is null or b.表名2 is null or b.字段名 is null
or a.标识 <>b.标识 or a.主键 <>b.主键 or a.类型 <>b.类型
or a.占用字节数 <>b.占用字节数 or a.长度 <>b.长度 or a.小数位数 <>b.小数位数
or a.允许空 <>b.允许空 or a.默认值 <>b.默认值 or a.字段说明 <>b.字段说明
order by isnull(a.表名1,b.表名2),isnull(a.序号,b.序号)--isnull(a.字段名,b.字段名)
go
  • 打赏
  • 举报
回复
咱这也一个裤衩的,

不知道怎么查一个库的存储过程和视图的t-sql关键字,
用t-sql比较,也只能比较存储过程的字符串是否一样了
我是这么想的

加上逻辑,+上查询存储过程的t-sql+上比较字符串的
XXXXXX
非DBA啊
cd731107 2011-07-23
  • 打赏
  • 举报
回复
--显示数据库表和字段
SELECT CONVERT(varchar(20), a.id) + '_' + CONVERT(varchar(20), a.colid) AS FID,
a.id AS FTableID, b.name AS FTableName, a.colid AS FColID, a.name AS FColName,
c.[value] AS FColDesc, a.xtype AS FTypeID, d.name AS FTypeDesc,
a.length AS FLength
FROM dbo.syscolumns a INNER JOIN
dbo.sysobjects b ON b.id = a.id AND b.xtype = 'U' AND
b.status > 0 LEFT OUTER JOIN
dbo.sysproperties c ON c.id = a.id AND c.smallid = a.colid AND
c.type = 4 LEFT OUTER JOIN
dbo.systypes d ON d.xtype = a.xtype




分别在两个数据库中执行和对比
claro 2011-07-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jessie_zhang 的回复:]

补充一点,就是不用比较表结构之内的,对于第2点比较完内容如果发现不同的话也只是列出名字就是了,不需要同步或做其他的。
[/Quote]不比较,何来差异?
Jessie_Zhang 2011-07-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangsunjun 的回复:]

咱这也一个裤衩的,

不知道怎么查一个库的存储过程和视图的t-sql关键字,
用t-sql比较,也只能比较存储过程的字符串是否一样了
我是这么想的

加上逻辑,+上查询存储过程的t-sql+上比较字符串的
XXXXXX
非DBA啊
[/Quote]
四方叔已经帮我做了对表名,就内容比较麻烦,正在努力ing......泪奔
Jessie_Zhang 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acherat 的回复:]

这。。。!
[/Quote]
同学,有话直说呀~~
AcHerat 2011-07-22
  • 打赏
  • 举报
回复
这。。。!
Jessie_Zhang 2011-07-22
  • 打赏
  • 举报
回复
补充一点,就是不用比较表结构之内的,对于第2点比较完内容如果发现不同的话也只是列出名字就是了,不需要同步或做其他的。
内容概要:本文研究了考虑隐私保护的分布式联邦学习在居民电力负荷预测中的应用,提出了一种基于联邦学习框架的方法,使多个参与方能够在不共享原始数据的前提下协同训练高精度的负荷预测模型。该方法有效缓解了传统集中式数据收集带来的隐私泄露风险,结合Python实现了算法原型,并通过实验验证了其在保证预测性能的同时,具备良好的隐私保护能力。研究进一步分析了模型在不同数据分布、通信轮次和客户端数量下的适应性与鲁棒性,展示了其在智能电网、能源管理系统及需求侧管理中的广阔应用前景。; 适合人群:具备一定机器学习基础和电力系统背景的研究生、科研人员,以及从事智慧能源、数据隐私保护相关领域开发的工程师。; 使用场景及目标:①应用于居民侧用电行为建模与精细化负荷预测,提升电网调度与能源配置效率;②在确保用户数据本地化存储的前提下,实现跨区域、跨主体的能源数据协同分析;③为构建安全、可信、合规的新一代智能电力系统提供核心技术支撑。; 阅读建议:建议读者结合文中提供的Python代码进行动手实践,深入理解联邦学习的通信机制、模型聚合策略及隐私防护设计,并关注模型收敛性与隐私预算之间的权衡优化。
内容概要:本文围绕“考虑隐私保护的分布式联邦学习电力负荷预测研究”展开,提出了一种融合联邦学习框架与隐私保护机制的电力负荷预测方法,旨在解决传统集中式数据处理中潜在的用户隐私泄露题。通过构建分布式模型训练体系,各参与方在本地完成模型训练,仅向中心服务器上传模型参数或梯度信息,实现“数据不动模型动”的协同建模模式,确保数据“可用不可见”。研究采用Python语言实现了完整的联邦学习流程,涵盖客户端本地训练、全局模型聚合、隐私保护策略(如差分隐私或同态加密)集成、通信机制设计及预测性能评估等核心模块,显著提升了电力负荷预测在隐私安全与模型精度之间的平衡能力。; 适合人群:具备Python编程基础和机器学习基础知识,从事电力系统、智能电网、能源大数据分析、数据隐私保护等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于居民或工业级电力负荷预测任务,在保障用户用电数据隐私的前提下实现高精度预测;②为构建符合数据合规要求的智慧能源管理系统提供技术支撑;③推动联邦学习在能源互联网、跨企业数据协作等场景中的落地应用,促进多方协同建模与数据价值释放。; 阅读建议:建议读者结合文中提供的Python代码进行实践操作,重点关注联邦学习的通信轮次设置、本地训练迭代策略、模型聚合算法设计以及隐私噪声添加机制的实现细节,并可根据实际需求替换底层预测模型(如LSTM、XGBoost、Transformer等)以进一步优化预测性能。
内容概要:本文介绍了一种基于噪声抑制半监督学习的锂离子电池SOH(State of Health,健康状态)估计方法的Python代码实现,旨在通过结合半监督学习框架与噪声抑制技术,提升电池健康状态预测的准确性与鲁棒性。该方法充分利用少量有标签样本和大量无标签数据进行模型训练,有效缓解了实际应用中电池老化数据标注成本高、获取困难的题。文中详细阐述了模型的整体架构设计、关键特征提取策略、噪声处理机制以及半监督学习中的损失函数构建,并提供了完整的可复现代码,便于研究人员理解和二次开发。; 适合人群:具备一定机器学习理论基础和Python编程能力,从事电池管理系统(BMS)、新能源汽车、储能系统等领域的科研人员或工程师,尤其适用于关注电池寿命预测、状态估计及数据驱动建模的研究生与青年学者。; 使用场景及目标:①实现锂离子电池健康状态的高精度估计,服务于电池管理系统的优化与安全预警;②为工业场景下标注数据稀缺的退化建模题提供一种高效的半监督解决方案;③推动复杂噪声环境下电池性能退化预测的研究进展,增强模型在真实工况中的泛化能力和稳定性; 阅读建议:建议读者结合所提供的Python代码逐模块深入学习,重点理解数据预处理流程、噪声抑制模块的设计原理以及半监督损失函数的实现细节,同时可在不同公开电池数据集上进行迁移实验与对比分析,以全面掌握该方法的有效性与适用边界。

22,297

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧