

VisualStudioにてクエリビルダーのエディターを利用してパラメータを設定した場合、  
**@コード** をWHERE句から除外するか全てを対象にする方法はありますでしょうか。

[code]

    SELECT  コード,単価
    FROM    商品マスタ
    WHERE   コード=@コード
    
[/code]

SqlDataSourceのSelectQueryに対して  
SqlCommandのcommand.Parameters.Addと同様の機能が使えればと思ったのですが  
現在は以下のようなSQL文で対応しております。

[code]

    SELECT  コード,単価
    FROM    商品マスタ
    WHERE   (@コード IS NULL OR [コード] = @コード)
    
[/code]


CC BY-SA 3.0
2015-07-10T07:59:12.413
12246
2015-08-10T07:28:39.183
2015-07-10T08:16:36.273
4236
7462
question
.net sql
SQLエディターで作成したパラメータを削除または全てを対象にする方法


SQL文は文字列なので動的に変更することは可能ですが、その場合、何等かのフレームワークを用いるのも１つの手です。  
例えば.NET Frameworkには[Entity Framework](https://msdn.microsoft.com/ja-
jp/library/bb399567\(v=vs.110\).aspx)が提供されています。これを使用すると.NETコードで動的にSQL文を構築できます。またSqlDataSourceに相当する[EntityDataSource](https://msdn.microsoft.com/ja-
jp/library/system.web.ui.webcontrols.entitydatasource\(v=vs.110\).aspx)も提供されています。（こちらは使ったことがないので適切かどうかはわかりませんが…）

これらを使ったとしても内部的には質問者さんの書かれたようなSQL文が生成されてDBエンジン上で実行されることには変わりありません。


CC BY-SA 3.0
2015-07-17T23:20:33.487
12459
2015-07-17T23:20:33.487
4236
12246
answer


ストアドプロシージャ(T-SQL)を利用すれば動的なSQLが書けることがわかりましたが、  
以下のSQL文の方が優れているように思いますし、複雑なコードが不要となると思います。

[code]

    WHERE   (@コード IS NULL OR [コード] = @コード)
    
[/code]

T-SQLで動的に行う場合は以下で分岐が可能でした。

[code]

    CREATE PROCEDURE [ado].[item]
    @コード nvarchar(30)
    
    IF @コード IS NULL
      BEGIN
      SELECT  コード,単価
      FROM    商品マスタ
      END
    
    ELSE    
      BEGIN
      SELECT  コード,単価
      FROM    商品マスタ
      WHERE   コード=@コード
      END
    
[/code]


CC BY-SA 3.0
2015-08-10T07:28:39.183
14230
2015-08-10T07:28:39.183
7462
12246
answer