【发布时间】:2016-07-07 15:32:29
【问题描述】:
我需要为 Oracle、SQL Server 和 C# 中的结果集计算校验和,因为我想检查它们是否都相等。
样本数据:
CREATE TABLE [dbo].[TestTable](
[ParentArticleNumber] [nvarchar](50) NOT NULL,
[ArticleNumber] [nvarchar](50) NOT NULL,
[Amount] [decimal](18, 4) NOT NULL
)
GO
Insert Into TestTable (
ParentArticleNumber
, ArticleNumber
, Amount)
values
('Art1', 'Art3', 10.5)
, ('Art1', 'Art2', 20)
, ('Art4', 'Art2', 22.35)
Go
在 C# 中,字段的类型为 string 和 decimal
示例查询:
Select
ArticleNumber
, Amount
From
TestTable
Where
ParentArticleNumber = 'Art1'
任何想法如何计算在每个系统上得到相同结果的校验和?
【问题讨论】:
-
你为什么要这样做?这是一个非常不寻常的请求,它不会扩展到超过(非常)几千行。您要解决的实际问题是什么?简单地检测变化?查找更改的行?两个数据库都有自己的更改跟踪机制,可以扩展到数百万行
-
通常结果集的大小约为 40 行。它不必扩展到数千行。实际的问题是非常低的带宽我必须在程序运行时检查 DB A 中的结果集是否与 DB B 中的结果集相同。大约 98% 的情况是这种情况校验和的想法很小我必须在全球范围内传输的数据量。
-
这就是为什么你需要解释你的实际问题,而不是你试图解决它的原因。听起来您正在尝试使用 SQL Express 在船舶之间同步数据,并在卫星上使用 Oracle DB 上的 HQ 数据。有几种方法可以解决这个问题 1) 在船上和总部都使用 C# 计算散列,并在它们之间传输散列。更少的带宽,往返的延迟更高。您可以仅在数据更改时计算哈希值,并缓存该值。 2)无论如何将数据从总部推送到船舶。这样可以节省您的往返行程和...
-
3) 维护版本号而不是哈希,并且仅发送自上次同步以来的上/下更改。比较上传/下载的版本,看看这艘船是否需要请求更多的更改。有许多同步协议可以解决这种情况,不要尝试自己动手。例如 git 使用它的变体来同步多个存储库
标签: c# .net sql-server oracle