2016-04-22 9 views
0

夜間にSQLサーバーDBから、好ましくはC#を使用して更新するサイトにSharepointリストがあります。ここでキャッチですが、私はレコードが削除されたか、追加されたか、またはレコードのフィールドが更新されたかどうかはわかりません。私は、最も簡単なことは、リストからデータを削除し、それを新しいリストデータに置き換えることです。しかし、これを行う簡単な方法はありますか?私はリストから行ごとに3000以上の項目を削除してから3000+レコードを1つずつ追加するのは嫌です。C# - 置き換えSharepointリストデータ夜間

+0

を見てください:http://stackoverflow.com/questions/35638619/sql-server-2008-update-the-table-with-データをマージプライマリキー?noredirect = 1#comment58959010_35638619 –

+0

クイック返信ありがとう。残念ながら、私は2つのデータベーステーブルを更新するのではなく、データベーステーブルからSharepointリストを更新しています。 –

答えて

1

環境に応じて異なります。

1)timerjobをビルドし、リストを削除します(1つずつ項目を削除する必要はありません)。これは遅くなるため、再作成してください。リストを開き、dbからアイテムをインポートします。私たちが3.000 - 5.000の要素について話しているとき、これはそれほどではなく、私は10分で完了したと思います。

2)db内で更新されている場合は、項目で共有ポイントリストをループし、フィールドでチェックします。

リストを削除して完全なテーブルをインポートすることをお勧めします。私たちはそれほど多くのデータを話していないからです。

もう1つの方法は、BCSまたはBDCを使用することです。その後、データは常に適切な場所に置かれ、dbと同期されます。この答えを見てみましょう

https://msdn.microsoft.com/en-us/library/office/jj163782.aspx

https://msdn.microsoft.com/de-de/library/ee231515(v=vs.110).aspx

+0

ありがとうございます。私はそれがそれほど単純ではないと感じていました。私はBCS/BDCオプションを見ていきます。 –

0

残念ながら、SQLのdelete文のように、リスト内のすべての項目を削除することは簡単ではありません。リスト全体を削除してリストを簡単にリスト定義から作成できる場合や、SP 2007以降SPUebクラスにProcessBatchDataというメソッドがあるため、パフォーマンスが懸念される場合はリストを再作成することができます。これを使用してバッチ処理コマンドを実行すると、6000個の別々のコマンドをサーバーに発行する際のパフォーマンスの低下を回避できます。ただし、削除または追加するすべてのアイテムのリストを含む醜いXMLを渡す必要があります。

+0

ありがとうございます。私はProcessBatchDataステートメントを検索しますが、これは私が望んだ通りではありませんでしたが、少なくとも何千もの別個のコマンドからパフォーマンスを少し上げることができます。 –

0

理想的な方法は、データベースからすべての行を列挙し、プライマリフィールド値を使用して各行がSharePointリストに既に存在するかどうかを確認することです。既に存在する場合は、それらを更新するだけです[1]。それ以外の場合は、新しい項目を追加できます。

[1] - オプションで、それらを更新する際に、リストアイテムフィールド値をデータベース列値と比較することができます。いずれかのフィールドに変更があった場合のみ更新してください。それ以外の場合はスキップしてください。

関連する問題