tableDiff的原理测试
看了一下tablediff的比较,网上有些文章说NULL不能比较,但是同步测试了SQL 2008 的功能,发现其实能够比较出NULL值的。
运行tablediff命令:SQL Profiler 跟踪出以下sql:
SELECT [dbo].[Tmp].[ID],
BINARY_CHECKSUM([dbo].[Tmp].[Account], [dbo].[Tmp].[CharName],
[dbo].[Tmp].[ID]) as MShash_54267293
FROM [dbo].[Tmp] WITH ( READUNCOMMITTED )
ORDER BY [dbo].[Tmp].[ID]
SELECT [dbo].[Tmp_Check].[ID],
BINARY_CHECKSUM([dbo].[Tmp_Check].[Account],
[dbo].[Tmp_Check].[CharName], [dbo].[Tmp_Check].[ID]) as MShash_54267293
FROM [dbo].[Tmp_Check] WITH ( READUNCOMMITTED )
ORDER BY [dbo].[Tmp_Check].[ID]
BINARY_CHECKSUM([dbo].[Tmp].[Account], [dbo].[Tmp].[CharName],
[dbo].[Tmp].[ID]) as MShash_54267293
FROM [dbo].[Tmp] WITH ( READUNCOMMITTED )
ORDER BY [dbo].[Tmp].[ID]
SELECT [dbo].[Tmp_Check].[ID],
BINARY_CHECKSUM([dbo].[Tmp_Check].[Account],
[dbo].[Tmp_Check].[CharName], [dbo].[Tmp_Check].[ID]) as MShash_54267293
FROM [dbo].[Tmp_Check] WITH ( READUNCOMMITTED )
ORDER BY [dbo].[Tmp_Check].[ID]
判断表中某一行的不同,使用了BINARY_CHECKSUM函数
按照表的某一行或表达式列表计算的二进制校验和值。BINARY_CHECKSUM 可用于检测表中行的更改
指定对表中的所有列进行计算。BINARY_CHECKSUM 在计算中忽略具有不可比数据类型的列。不可比数据类型包括 text、ntext、image、cursor、xml 和不可比公共语言运行库 (CLR) 用户定义的类型。 如果发现目标库没有:
SELECT [dbo].[Tmp].[Account],[dbo].[Tmp].[CharName],[dbo].[Tmp].[ID] FROM [dbo].[Tmp] WITH (READUNCOMMITTED) WHERE [ID] = 1
执行上面语句生成 insert语句。是一条一条生成。
如果目标库有不一样的
SELECT [dbo].[Tmp_Check].[Account],[dbo].[Tmp_Check].[CharName],[dbo].[Tmp_Check].[ID] FROM [dbo].[Tmp_Check] WITH (READUNCOMMITTED) WHERE [ID] = 4
目标库也会执行上面的查询得出哪个列不一样和生成更新sql
以上如果在SQL 2008 中执行tablediff生成大量数据会很慢,同时也会造成内存溢出。
总结(适用于SQL 2008 SP3):
1,tablediff 会忽略不可比较的字段
2,NULL也会比较出来
3,比较是先全部查询出数据,再把不同的行查出具体数据生成insert,update,delete 语句
4,数据量大时性能影响很大
分类:
SQL Server 研究
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2008-08-13 SQL 大数据量的优化例子讨论