質問

選択するフィールドを示すパラメータを使用してストアドプロシージャを作成したい。

E.g。 2つのパラメーター" selectField1"を渡したいおよび&select; selectField2"それぞれブールとして。

次に、次のようなものが欲しい

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)

他のヒント

SQL では、次のようにします:

SELECT  CASE WHEN @selectField1 = 1 THEN Field1 ELSE NULL END,
        CASE WHEN @selectField2 = 1 THEN Field2 ELSE NULL END
FROM    Table

リレーショナルモデルは動的フィールドカウントを意味しません。

代わりに、フィールド値に関心がない場合は、代わりに NULL を選択してクライアントで解析します。

CASE ステートメントが必要です:

>
SELECT
  CASE 
    WHEN @SelectField1 = 1 THEN Field1
    WHEN @SelectField2 = 1 THEN Field2
    ELSE NULL
  END AS NewField
FROM Table

編集:私の例は、提供されたパラメーターに応じて、2つのフィールドを1つのフィールドに結合することです。これは one-or-nother ソリューション(両方ではありません)です。出力に両方のフィールドを含める可能性が必要な場合は、Quassnoiのソリューションを使用します。

@selectField1 AS bit
@selectField2 AS bit

SELECT
CASE 
    WHEN @selectField1 THEN Field1
    WHEN @selectField2 THEN Field2
    ELSE someDefaultField
END
FROM Table

これはあなたが探しているものですか?

これは擬似的な方法です

IF (selectField1 = true) 
SELECT Field1 FROM Table
ELSE
SELECT Field2 FROM Table

あなたが望むものは:

    MY_FIELD=
        case 
            when (selectField1 = 1) then Field1
                                 else Field2        
        end,

選択中

ただし、プログラムでその列を表示しないだけではありませんか?

これを行うnoobの方法:

SELECT field1, field2 FROM table WHERE field1 = TRUE OR field2 = TRUE

if-elseを実行するプログラミング言語でのみ、この情報を適切に管理できます。

ASP / JavaScriptの例

// Code to retrieve the ADODB.Recordset
if (rs("field1")) {
   do_the_stuff_a();
}
if (rs("field2")) {
   do_the_stuff_b();
}
rs.MoveNext();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top