1

列名を引数として関数に渡す方法はありますか?

列に基づいて値をフィルタリングする関数を作成したいのですが、この列名を関数に(理想的には文字列として)渡しますか?

試しましたが、列名をvarcharとして宣言しましたが、明らかにこれは機能しません。

4

2 に答える 2

6

簡単な答え:いいえ。

これを行う唯一の方法は、動的SQLを使用することです。フィールド/テーブル名をパラメーターとして受け取り、実行する新しいSQLステートメントを作成するストアドプロシージャを作成することは珍しくありません。

ただし、関数は動的SQLを実行できません。


これは、誤った方向の設計を示している可能性があります。なぜこれが必要なのかを詳しく説明すると、まったく必要のない代替デザインを提供できる可能性があります。

または、関数よりもストアドプロシージャの方が適している場合があります。


一連のOR条件を使用するという考えは、あなたの説明のようなものにも適合します。しかし、それは通常、非常に悪い計画を生み出します。なぜ、どのように対処するのかを説明するために、役立つリンクを調べます。非常に詳細ですが、知っておくとよいでしょう。

編集リンクは次のとおり です。T-SQLの動的検索条件

于 2012-06-12T16:56:26.030 に答える
2

その場でクエリを作成する動的SQLでそれを行うことができます。または、フィールドの数が限られている場合は、次のようなことを行うことができます。

select * from table where
(param = 'field1' and field1 = value)
or (param = 'field2' and field2 = value)
于 2012-06-12T16:56:40.450 に答える