1. ホーム
  2. sql

[解決済み] SQLの条件付きSELECT

2022-03-06 04:53:30

質問

どのフィールドを選択すべきかを示すパラメータを持つストアドプロシージャを作成したい。

例えば、2つのパラメータ "selectField1" と "selectField2" をそれぞれboolsとして渡したいです。

そして、次のようなものが欲しい。

SELECT

if (selectField1 = true) Field1 ELSE do not select Field1

if (selectField2 = true) Field2 ELSE  do not select Field2

FROM Table

ありがとうございます。 カール

解決方法は?

許可されたフィールドのみを返す機能が欲しいようです。つまり、返されるフィールドの数もダイナミックでなければなりません。これは2つの変数で動作します。それ以上だと混乱します。

IF (selectField1 = true AND selectField2 = true)
BEGIN
   SELECT Field1, Field2
   FROM Table
END
ELSE IF (selectField1 = true)
BEGIN
   SELECT Field1
   FROM Table
END
ELSE IF (selectField2 = true)
BEGIN
   SELECT Field2
   FROM Table
END

動的SQLは、多重の場合に役に立ちます。この例では、少なくとも1つのカラムが真であると仮定しています。

DECLARE @sql varchar(MAX)
SET @sql = 'SELECT '
IF (selectField1 = true)
BEGIN
   SET @sql = @sql + 'Field1, '
END
IF (selectField2 = true)
BEGIN
   SET @sql = @sql + 'Field2, '
END
...
-- DROP ', '
@sql = SUBSTRING(@sql, 1, LEN(@sql)-2)

SET @sql = @sql + ' FROM Table'

EXEC(@sql)