VARCHAR
列名のを返すスカラー関数があります。
この結果を使用して選択クエリを作成したいので、次のようにします。
SELECT dbo.udf_GetColName('Val1', ColumnFromThisTable, etc) AS myCol
FROM tbl_ThisTable WHERE ...
現時点では、これは各値の列名である UDF の実際の出力を正しくリストしています。
私が望むのは、selectステートメントが関数から返された列の値を返すことです。
SET @sql = 'SELECT ' + dbo.udf_GetColName('Val1', ColumnFromThisTable, etc) + ' AS myCol
FROM tbl_ThisTable WHERE ... '
そして走るEXEC sp_executesql
動的 SQL ルートよりも良い方法はありますか? SQL がその列を UDF からの出力としてクエリできる方法はありますか?
編集して追加
これは、ビジネスが出力を選択するルールを管理する必要がある場所であるため、更新可能なテーブルにある必要があります。それらがテーブル値関数にハードコードされている場合、それらSELECT
を制御するのはもはやビジネスではありません。
はい、クエリは非常にカスタマイズ可能ですが、この場合は「良いこと」です。
さらに、 には有限数のパラメータがありますudf_GetColName
。ソース列名、ソース列値を受け取り、ルール テーブルでルックアップを行います。ルールがその列とその値の一致を検出すると、output column
が選択されて返されます。それ以外の場合は、デフォルトoutput column
が使用されます。これは選択する必要がある列であるため、入力または入力値とは大きく異なる可能性があります。
言ったように、私は他のアイデアを聞いてうれしいです.もちろん、これがばかげていて、別のルートを選ぶべきなら!
家に帰る前日の最終編集
tbl_ThisTable
の他の列の値に基づいて、から使用する列を選択する方法を探していますtbl_ThisTable
。
使用する列に関するこれらのルールは、テーブル内で簡単に更新できる必要があります。主な制限は、データベースへのインターフェース/フロント エンドです。ストレート データセットのみを返すことができるため、フロント エンドを使用してこの決定/連結を行うことはできません。複数のデータセットなど...
コードを書き直さずにデータベース内で更新できるこれらのルールを展開する良い方法があれば、ぜひ聞いてみたいです。現時点ではこれをテストしているだけなので、デザインは柔軟です。