0

ストアドプロシージャは次のように構成されます。

[dbo].[getSp] (
  @Color varchar(10) = Null,
  @Finish varchar(10) = Null,
  @Height varchar(10) = Null,
  @Type varchar(10) = Null,
  @Trim varchar(10) = Null,
  @Width varchar(10) = Null
)

これは、検索前のデータの外観です。このデータは不完全ですが、アイデアを得るための例です。すべての組み合わせがここにあります。

Color  |  Finish  |  Height  |   Type    |  Trim  |  Width  |
 Blue  |  Shiny   |   Tall   |  Toaster  | Normal |   3.5   |
(NULL) |  (NULL)  |  (NULL)  |  Toaster  | (NULL) |   3.5   |
(NULL) |  (NULL)  |   Tall   |  Toaster  |  Deco  |    4    |
(NULL) |  Shiny   |   Tall   |  Toaster  |  Deco  |    4    |
 Blue  |  Shiny   |  (NULL)  |  Toaster  |  Deco  |    4    |
(NULL) |  Shiny   |   Tall   |  Toaster  |  Deco  |    4    |
(NULL) |  Satin   |   Tall   |  Toaster  |  Deco  |    4    |
  Red  |  (NULL)  |   Tall   |  Toaster  |  Deco  |    4    |

SELECTステートメントはTypeプライマリルックアップフィールドとして持つため、次のようになります。

SELECT * FROM TABLE WHERE Type = @Type And
(

..... Confused about this part, 

)

ただし、基本的には、次のように、パラメータの一部のみを使用して呼び出されたときにテーブルに表示される行である組み合わせのみを含めるようにストアドプロシージャを実行したいと思います。

[getSp] 
@Color='Blue',
@Finish='Shiny',
@Type='toaster'

そして、spは最終的にこれを返します(すべての組み合わせ)。

1. Blue Shiny Tall Toaster
2. Blue Shiny Toaster
3. Blue Tall Toaster
4. Blue Toaster
5. Tall Toaster
6. Shiny Toaster
7. Shiny Tall Toaster

Whereそのため、ストアドプロシージャ内のステートメントを構造化して、ストアドプロシージャのパラメータに含まれているものだけのすべての組み合わせを返す方法について混乱していますが、残りのパラメータ(結果や検索から除外されるなど)はWidthTrimいつデフォルトで渡さNULLれます。

私は運がなくてこれを試しました...

SELECT * FROM TABLE WHERE 
Type = @Type AND
(
COLOR = COALESCE(@Color,COLOR) AND...
... for each other param
)

私は運がなくてこれを試しました...

SELECT * FROM TABLE WHERE 
Type = @Type AND
(
(Color = @Color OR COALESCE(@Color,COLOR) IS NULL) OR...
... for each other param
)

sqlステートメントを作成しようとしましたが、失敗しました。提案があれば役に立ちます。

4

1 に答える 1

0

これはあなたのニーズを満たすはずです。パラメータを指定すると、それを使用してフィルタリングされます。そうでない場合はそうではありません。

SELECT *
FROM table_1
WHERE (@Color IS NULL OR Color = @Color)
AND (@Finish IS NULL OR Finish = @Finish)
AND (@Height IS NULL OR Height = @Height)
AND (@Type IS NULL OR Type = @Type)
AND (@Trim IS NULL OR Trim = @Trim)
AND (@Width IS NULL OR Width = @Width)
于 2012-04-18T05:16:27.157 に答える