SQLで動的な名前の関数を呼び出すことはできますか?例えばSQLで動的関数名を呼び出す
:
SELECT functionid, (SELECT results FROM dbo.Function_*functionid*) AS results
FROM List_of_Functions
これは、テーブルList_of_Functionsの各行に異なる関数を呼び出すことになります。
これはすべて間違っていますか?
SQLで動的な名前の関数を呼び出すことはできますか?例えばSQLで動的関数名を呼び出す
:
SELECT functionid, (SELECT results FROM dbo.Function_*functionid*) AS results
FROM List_of_Functions
これは、テーブルList_of_Functionsの各行に異なる関数を呼び出すことになります。
これはすべて間違っていますか?
あなたが好きなSQL文の(どちらかそれを入力するか、あなたのテーブルに基づいて動的に構築)を構築する必要があります。代わりに、すべてのこれらの機能を構築する
SELECT
functionid
,CASE functionid
WHEN 1 THEN dbo.Function_1()
WHEN 2 THEN dbo.Function_2()
WHEN 3 THEN dbo.Function_3()
END AS results
FROM List_of_Functions
を、それがより良いではないでしょう1つの関数を作成し、その関数が処理を区別するために使用できる値を渡しますか? like:
SELECT
functionid
,dbo.Function(functionid) AS results
FROM List_of_Functions_Parameters
SQLで動的な名前の関数を呼び出すことはできますか?
純粋なSQLではありません。
動的SQLを使用してこれを実現できますが、特にリスクはありません。具体的にはSQL Injectionです。
私は、被験者の包括的な治療について、Erland SommarskogによってThe Curse and Blessings of Dynamic SQLを読むことをお勧めします。
しかし、私が投稿したクエリでは、関数名の動的部分はSQLの値から来ていて、ユーザーの入力ではないので何が注入できるのですか? – William
@William - あなたの 'List_of_Functions'に不要なものが入ったら?私は_all_ケースではリスクだと言っているわけではありませんが、一般的に動的SQLを使用する場合は、このリスクを念頭に置く必要があります。 – Oded
この場合、List_of_Functionsは私によって作成されるので問題はありません。したがって、これは純粋なSQLではまったく不可能ですか?私はこの問題に近づける他の方法を知っていますか? – William
方法1と方法2のパフォーマンスに違いがあるかどうかは分かりますか? – William
@ウィリアム、私はあなたがどれくらい多くの機能を持っているのか、実際に何をしているのか分かりません。したがって、パフォーマンスについて何かが完全な推測であると言っています。 –