1

現在、1 つの値を持つ SQL パラメータを渡しています。

だから今私は持っています:

 SqlParameter sqlParameter = new SqlParameter("@Parameter", SqlDbType.VarChar);
 sqlParameter.Value = ParameterValue

WHEREこれは、SQLクエリの句でうまく機能しています。

ただし、複数の値を my に渡すオプションを残しておきたいと思いますWHERE

通常の文字列を渡す代わりに、値を区切るためにコンマを含む文字列を渡すことを考えていました。

そうSqlParameter.Value = "value1, value2, value3";

そして、私はそれが次のように動作することを望みます

WHERE Parameter = value1 OR Parameter = value2 OR Parameter = value3

実際に SQL クエリを変更する必要がない場合に、これを行う簡単な方法はありますか?

4

3 に答える 3

1

結論: やろうとしていることをサポートするには、SQL ステートメントまたはストアド プロシージャのいずれかを変更する必要があります。

達成しようとしていることを実行するためのさまざまなアプローチがありますが、私の意見では理想的なものはありません。Erland Sommarskog は、配列とリストを SQL Server に渡す多くの方法を説明した素晴らしい記事 ( http://www.sommarskog.se/arrays-in-sql-2005.html ) を書いています。この記事を読むことをお勧めします。SQL Server 2008 以降を使用している場合のクリーンなアプローチは、テーブル値パラメーター ( http://www.sommarskog.se/arrays-in-sql-2008.html ) を使用することです。このアプローチでは、基本的に値の配列を SQL Server に渡します。

テーブル値パラメーター アプローチを使用する場合、パラメーターは値を選択できるテーブルのように動作します。たとえば、ストアド プロシージャ (または SQL ステートメント) を次のように変更できます。

 CREATE PROCEDURE get_products @Parameter myCustomParameterType READONLY AS
 SELECT p.ProductID, p.ProductName
 FROM   Products p
 WHERE  p.ProductID IN (SELECT n FROM @Parameter)

このアプローチの詳細を提供する別の SO の質問/回答があります: How to pass table value parameters to stored procedure from .net code

テーブル値パラメーターの詳細については、http: //msdn.microsoft.com/en-us/library/bb675163.aspxを参照してください。

于 2013-08-29T14:33:42.337 に答える
0

コンマ区切りのリストを渡して値をチェックする場合は、リストを取得して分割し、一時テーブルまたはテーブル変数に挿入してから、JOIN、IN、などの通常のテーブル ステートメントをすべて実行できます。存在します。

これは、カンマ区切りの文字列を取得してテーブルに変換する方法に関する良い記事です。 http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx

于 2013-08-29T14:27:27.263 に答える