特定のデータベース内の任意のキーの 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 に割り当てるために何かが必要になることに気付きました。
そして、私のアプローチがすべて間違っていることを遠慮なく教えてください。