私の状況に適したソリューションを一日中探しています。私は非常に似ているが、私の状況では動作しないものをいくつか見つけました。私はそれらを試しました。sqlの列名のパラメータにcase文を使用where節
ここにシナリオがあります。私はテーブルベースとパーツディテールが2つあります。データグリッドビューを塗りつぶすSQLクエリのパラメータを選択するためのドロップダウンリストを持つASP Webサイト(内部のみ)があります。
私の問題はこれです。ページのドロップダウンリストボックスに基づいて、検索するために入力された条件を列名に割り当てる必要があります。ここで
は、私が定義しようとしているクエリです:(この1つは0行を返す)
sqlCmd.CommandText = ("Select ba.referenceid, ba.partnum, pd.width, pd.length, CONVERT(varchar(12), pd.dateentered, 101) As [dateentered], ba.partqty, ba.status, ba.material From tbl_dlbase ba Join tbl_partdetails pd On ba.referenceid = pd.referenceid Where Case @field1 When 'part #' Then 'ba.partnum' When 'Spacing' Then 'pd.spacing' When 'Surface' Then 'pd.surface' When 'Height' Then 'pd.height' When 'Thickness' Then 'pd.thickness' End Like '%' + @criteria1 + '%'")
sqlCmd.Parameters.AddWithValue("@field1", ddlSc1.SelectedItem.Text)
sqlCmd.Parameters.AddWithValue("@criteria1", txbCriteria1.Text)
これは私が試してみましたSQL文の最新バージョンです。 ASPページのドロップダウンリストddlsc1からの選択に基づいてフィールド/カラム名を設定できる必要があります。
スタジオのマネージャーでクエリを試していて、何か指があるかもしれませんが、0行も返すので、クエリに問題があることがわかりました。
名前のパラメータを使用して列名フィールドを設定するにはどうすればよいですか。私はこれがSQLインジェクションの大きなセキュリティ上の懸念であることを知っていますが、これは社内専用のサイトであり、もっと重要なことに、私の上司は変数を使ってやりたいと言いました。
私は変数に名前を使用していると考えていました。それでは、動的SQLとは何ですか? – mbcharney
ここでは動的である必要はありません。現在のクエリの外観から、私はあなたが必要とするものを知っているとは思いません。 – Codexer
"私は自分の状況に適した解決策を一日中探していましたが、私は非常に似ているが、私の状況ではうまくいかないものをいくつか見つけました。あなたはすでにDynamic SQLが何であるかを知っているようです(これはインターネット上の*非常に*一般的な要求です)。あなたがすでに試したことを「私の状況のために働かないでください」と教えてください。 – RBarryYoung