私の問題は本質的に単純です - データベースを照会し、一連のファイル(〜1000)に出力を書き込みます。C#と長いSQL Serverクエリ、これを行う正しい方法は何ですか?
SQL ServerでC#から実行する必要があるSQLクエリがあります。クエリは、IN節の値の1つを除いて、かなり簡単です。
例として、クエリは次のようになります。値のリストが6つの文字それぞれ約300の文字列である
SELECT
ID, Name
FROM
MyTable
WHERE
SomeValue IN (/* list of values */)
。値は最終的には( "A00001"、 "A00002"など)のようになり、アプリケーションのユーザーによって入力として指定されます。
私の最初の考えは、それぞれの値をまとめた長い文字列としてクエリを構築することでした。しかし、これは適切なアプローチのようには見えず、エラーが起こりやすいようです。私の次の考えはストアドプロシージャを使用することでしたが、データをどのようにそれに渡すべきかはわかりません。データが確実に渡される効率的な方法で、このクエリをどのように構築する必要がありますか?
私の他の選択肢は、SQL Serverからすべてのデータを読み込み、C#で結果をフィルタリングすることです。しかし、私がこれを行うと、約9百万のレコードが得られ、データセットとしてメモリに読み込むには多すぎるようです。 〜5000のレコードを解析した後にファイルを作成しているため、受信しているデータを噛み砕いている間に、データ・リーダーをデータベースに接続したままにしたくありません。
最良のアプローチは何ですか?あなたがそれを行うことができない場合
SELECT ProductID from Product where ManufacturerID in
(SELECT ManufacturerID from Manufacturer where HomeOfficeLocation = 'France')
:限り、ユーザーはあなたが提供してきましたリスト、簡単な連結されたリストから選んでいるよう
あなたのデータがユーザの入力から来ている場合は、SQLインジェクション攻撃を避けるためにあなたの入力を注意深く浄化したいと思うでしょう。両方とも典型的なSQLインジェクションに対する効果的な手段であるため、バインド変数または一時テーブルを使用する方がよいかもしれません。 – LBushkin
データベースの操作にはどのようなものがありますか?両方 - "私は文字列としてクエリをまとめる"と "私は何をすべきか分かっているのでLINQを使う"ということは、入力の型の配列を与えて効率的に行うことができるということです。このフォームに申請書を入力することは、初年度IT学生のための文字列操作の宿題です。だから、問題はどうですか? – TomTom
@TomTom問題は私が財務報告を生成しており、入力がSSRSが処理するのが難しいことに終わります。その上に、出力は一連のExcelファイルです。入力パラメータは、ユーザが報告することを望むバーコードのリストとして考えることができる。実際のクエリとサンプル入力を提供することは、あまりにも多くの不要な複雑さを問題に追加します。私はすでにクエリを書いて実行する方法を知っています。私が知りたいのは、〜10000文字列をクエリとして効率的に処理する方法、または6000文字列をストアドプロシージャに渡す方法です。 –