0

私はSQLサーバーを勉強していて、さまざまな例をやろうとしています. この場合、何を使用すればよいか教えてください。以下は私のckecklistです(チェックボックスではなく、リストとして別のウィンドウで開きます):

Colors 
   Red
   Blue
  White
  Black
  Green

テーブル item.colors から

選択したレコードに基づいて検索を提供したい。たとえば、「赤」と「青」が選択され、出力としてテーブルから関連付けられたレコードを取得したいとします。

Colors
  Red     v
  Blue    v
  White
  Black 
  Green

出力:

  id    Name      Colors
  1    T-shirt    Red      
  2    Boots      Blue    

これを行う方法について何か提案はありますか? パラメータを使用する場合でも、数百のレコードの場合はどうすればよいですか? 100 個のパラメーターを持つことはできません)

4

1 に答える 1

0

使用できるオプションが 2 つあります (おそらくそれ以上)。

A. 文字列パラメータの使用

まず、アプリケーションで値を単一の文字列に連結し、それを 1 つの varhcar パラメータとして送信します。'Red;Blue' (またはおそらくいくつかの ID) のようになります。その後、SQL プロシージャは文字列を分割して値のリストに戻し、#temp テーブルに配置する必要があります。ウェブ上には文字列分割関数がたくさんあります。簡単にグーグルで検索するか、このリンクをチェックしていくつかのアイデアを得ることができます: How do I split a string so I can access item x? 最終的には、#temp テーブルの値をテーブルと結合するだけで、目的のデータを取得できます。

B. XML

これはもう少し「派手な」オプションです。アプリからの値を XML に入れ、XML パラメータとしてストアド プロシージャに渡します。どのプログラミング言語を使用しているかはわかりませんが、これを行うためのメソッドが提供されているはずです。手順では、方法がわかっている場合は、XML パラメータをテーブルと直接結合してデータをフィルタリングするか、最初に #temp テーブルにスピルすることができます。繰り返しますが、XML の操作方法に関する情報はたくさんあります。いくつかの例: SQL Server 2008 の XML フィールドから値を選択 http://blog.sqlauthority.com/2010/06/23/sqlauthority-news-guest-post-select-from-xml-jacob-sebastian/

編集:(3番目のオプション、最も簡単ですが、お勧めしません)

C. 動的 SQL

オプション A と同じように連結文字列を作成しますが、プロシージャ内で - 分割して値に戻すのではなく、SELECT ステートメントで文字列に貼り付け、sp_executesql または EXEC を使用します。

SET @sql = 'SELECT * FROM YourTable WHERE Color IN (' + @parameter + ')'
EXEC(@sql)
于 2013-03-28T08:42:58.563 に答える