OracleとSQL Serverテーブル間のデータを効率的に比較する方法を探しています。私は、Oracleのテーブルを制御することはなく、選択クエリだけを実行することができます。この表には30,000以上の行が含まれています。現在、私はOracleテーブルからデータセットを作成し、それを維持しているSQL Serverテーブルと比較します。このケースでは、SQL Serverテーブルの学生番号の有無を確認しています。番号が存在しない場合は、SQL Serverテーブルに挿入します。これはあなたが想像することができるように、ひどく非効率的です。あなたの提案や例は非常に高く評価されます。OracleテーブルとSQL Serverテーブルの比較
答えて
Oracleインスタンスにアクセスできるアカウントを使用して、SQL ServerにLinked Server instanceを作成します。
次に、あなたが使用して、不足している内容でSQL Serverテーブルを更新することができます。
INSERT INTO [SQLServer].[dbo].[table]
SELECT columns
FROM [Oracle].[database].[schema].[table] x
WHERE NOT EXISTS(SELECT NULL
FROM [SQLServer].[dbo].[table] y
WHERE y.student_number = x.student_number)
がありNOT INとLEFT JOINをしている/ NULL代替IS - NOT IN and NOT EXISTS perform better than LEFT JOIN/IS NULL when the columns compared (in this case, student_number) is not nullable (the value can never be NULL)。
script this as a SQL Server Agent Job if you need it to run periodicallyに簡単です。
+1。私はそのような承認を試みましたが、CLOB列が関与している場合は機能しませんでした。私はそれがいくつかのコードページの非互換性によって引き起こされたのか、OLEDBの一般的な制限であるのか分かりません(リンクされたサーバーはOLEDBを使用するようです)。問題のある列がなければ、それは本当にうまく動作します。 –
これはうまくいくようですが、サーバー上で追加の設定や構成が必要です。私はこれらを支配していない。 – gnome
これは良い答えであるかどうかはわかりませんが、あなたが求めているものを見るのは難しいですが、私は個人的にRDBMSに処理負荷を軽減します。その代わりに、関連する値だけを返す単一のselect文をアルゴリズムで作成します。
これは、NOT IN
のSQL演算子を使用して実行できます。
ですから、通常どおりしかし、あなたの文字列を始める...
String statement = "SELECT * FROM OracleDB where StudentID NOT IN (";
foreach (val in StudentIDValuesFromYourDB)
{
statement = statement.concat(val + ", ");
}
statement = statement.substring(0,statement.length()-2);//remove the extra comma
statement = statement.concat(")");
確かにそれは巨大なの文であり、私はそれをしても私は確かに大きな(もだということが許可されるかどうかわからないですオラクルの構文のうち、私はOracleクライアントのために私の仕事に順応するのが嫌いですが)、私はRDBMSがあなたのためにこのすべての仕分け作業を行うためによりよく最適化されるだろうと考えています。この文を実行できる場合は、OracleDBにある値のみを取得し、自分のDBには格納しません。
このリストを使用して、関連する挿入文だけを生成できるようになりました。
単純なSSISパッケージで十分です。 OracleとSQLServerからデータを取得するデータフロータスクを作成します。これらのタスクは、それらを比較し、失敗時に更新し、成功時に挿入するルックアップコントロールです。 SSISは非常に高速かつ効率的に設計されています。
ちょうど私が入力していたものですが、あなたは私をEnterキーに倒しました。また、パッケージを使用すると、レポートを実行する直前に毎日実行するようにスケジュールできます。 – HLGEM
@HLGEM幸運次回:-)。いい点がありました。 –
ありがとうございます。 OMG Poniesは、私が必要とするものに対して適切なソリューションであるため、小切手を手に入れます。ただし、サーバーはリンクされていません。だから私はlinqを使用して回避策を書く必要がありました。
まず私がオブジェクトに設定されたOracleデータを変換:
List<Student> studentList = new List<Student>();
studentList = (from d in dataSet
select new Student
{
StudentNumber = d.STUDENTNUMBER,
.... other properties
}).ToList();
私はその後、comparer classを書いて、その差を返しました:
public IEnumerable<Student> ListNewStudents(IEnumerable<Student> studentList)
{
List<Student> otherStudentList = (from s in _dataContext.Students
select new Student
{
StudentNumber = s.StudentNumber
}).ToList();
return studentList.Except(otherStudentList, new StudentComparer()).ToList();
}
は完全に働いたと私は再び幸せな男です。
- 1. SQL Serverテーブルの同じ行の比較
- 2. SQL Server - 'CREATE TABLE' SQLスクリプトをテーブル定義と比較するC#
- 3. 1つのSQL Serverテーブル内の別の行と行の比較
- 4. ScalarのパフォーマンスとSQL Serverのテーブル値関数の比較
- 5. SQL Serverの2つのテーブルをデータベースとレイヤーで比較する
- 6. SQLテーブルのDatetime.nowとの比較
- 7. ORACLE、SQLのネスト:複数のテーブルからの比較、カウント
- 8. テーブル内のSQLを比較するSQL
- 9. SQL Serverの2つのテーブルを比較するには?
- 10. SQL Server:複数のテーブルの値を比較する
- 11. 2つの大きなテーブルを比較する(SQL Server)
- 12. SQL ServerとMongoDBの比較?
- 13. テーブルの比較
- 14. SQL - テーブル内の日付の比較
- 15. 高度なSQLテーブルの比較方法
- 16. Oracle SQLのNULLの比較
- 17. ORACLE SQL CSV列の比較
- 18. OracleのSQL比較ツール
- 19. SSISの2つのソースと更新SQL Serverテーブルを比較しますか?
- 20. Oracle SQLの駆動テーブルと駆動テーブル
- 21. OracleデータベースとSQLサーバーの比較
- 22. jquery SQL Serverテーブルのdatetimeとユーザーのdatetimeを比較し、テーブルから日付を取得します
- 23. SQL Server JBDCドライバの比較
- 24. smalldatetimeの比較SQL Server
- 25. 2つのテーブルのデータを比較します.1つはOracle、もう1つはSQL Serverです
- 26. SQL ServerとORACLEの日付を比較する一般的なSQL
- 27. OracleテーブルからSQL Serverテーブルにデータをプッシュする方法は?
- 28. MySQL:テーブルとビューとルーチンとの比較
- 29. SQL Serverの一時テーブルとテーブル変数
- 30. MySQLテーブルへのSQL Serverテーブル
1. SQLはクエリ言語です。 SQL Serverを意味しますか? 2. *あなたは何をしようとしていますか?あなたは*あなたがそれをやる方法を説明しました。 – Ronnis
SQL Server。最終目標は、午前のレポートを実行し、新しく生徒のみをOracleテーブルでキャプチャし、SQL Serverテーブルにコピーすることです。 – gnome