Oracle、SQL ServerおよびC#で結果セットのチェックサムを計算する必要がある。ResultSetのOracle、SQLServer、およびC#で同じチェックサムを計算する
サンプルデータ:フィールドはタイプstring
とdecimal
である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
サンプルクエリ:
Select
ArticleNumber
, Amount
From
TestTable
Where
ParentArticleNumber = 'Art1'
任意のアイデアをどのように取得するチェックサムのようなものを計算します各システムで同じ結果が得られますか?
なぜそれをしたいですか?これは**非常に珍しいリクエストです。ちょうど数千の行以上に拡張されることはありません。あなたが解決しようとしている*実際の問題は何ですか?変更を検出するだけですか?変更された行を探しますか?両方のデータベースには、何百万行にも及ぶチェンジトラッキングのための独自の機構があります。 –
通常、結果セットのサイズは約40行です。それは、千の行に拡大縮小する必要はありません。実際の問題は、DB Aの結果セットがDB Bの結果セットと同じ場合、プログラムの実行時にチェックする必要がある非常に低い帯域幅です。これは、約98%の場合です。チェックサムのアイデアは、データ量は世界中で送信する必要があります。 – VSDekar
そのため、実際の問題を解決しようとするのではなく、実際の問題を説明する必要があります。サテライト経由でOracle DB上のHQデータとSQL Expressを使用して、船間でデータを同期しようとしているようです。これにはいくつかのアプローチがあります。1)船とHQの両方でC#を使用してハッシュを計算し、それらの間でハッシュを送信します。帯域幅が小さく、ラウンドトリップのレイテンシがはるかに大きくなります。データが変更されたときにのみハッシュを計算し、値をキャッシュすることができます。 2)HQから船にデータを押し込む。これは、あなたに往復を節約し、... –