0

特定のデータベース内の任意のキーの ID を表示可能な値に変換するストアド プロシージャを作成しようとしています。そのために、KeyField と DisplayField に使用するフィールドを指定する LookupMap という名前のテーブルを追加しました。

TableName     KeyField      DisplayField
---------     --------      ------------
Company       CompanyId     CompanyName
Location      LocationId    LocationName

テーブル名とキー値を渡して、表示値を取得したいと思います。以下は私が失敗したことです:

Create Procedure [dbo].[GetLookup]
@TableName varchar(50), 
@Key varchar(50),
@DisplayValue varchar(255) out
AS
BEGIN
DECLARE @DisplayField varchar(50)
DECLARE @IdField varchar(50)
Select @DisplayField = DisplayField, @IdField = IdField 
    From LookupMap where TableName = @TableName

DECLARE @sql NVARCHAR(500)
SET @sql = N'SET @DisplayValue = (SELECT ' + @DisplayField + N' FROM ' + @TableName + 
               N' WHERE ' + @IdField + N' = ''' + @Key + N''')'

Print @sql
Set @DisplayValue = (EXEC (@sql))

END

すべてが最後の行まで機能しますが、動的クエリから値を取得して out パラメータに割り当てる方法がわかりません。また、キーが一意であり、一致するのは 1 つだけであることはわかっていましたが、テーブルの結果を varchar に割り当てるために何かが必要になることに気付きました。

そして、私のアプローチがすべて間違っていることを遠慮なく教えてください。

4

1 に答える 1

1

動的SQLを介して変数を直接設定する代わりに、一時テーブルを作成し、挿入ステートメントにexec(@sql)を使用することができます。

それで

    CREATE TABLE #Result (result varchar(50))

    DECLARE @sql NVARCHAR(500)
            SET @sql = N'SELECT ' + @DisplayField + N' FROM ' + @TableName + 
                   N' WHERE ' + @IdField + N' = ''' + @Key + N''''

    INSERT INTO #Result
    EXEC(@sql)

    SELECT @DisplayField = result FROM #Result
于 2013-03-07T19:30:06.023 に答える