我正在尝试构建一个存储过程,它将 ID 转换为给定数据库中任何键的可显示值。为此,我添加了一个名为 LookupMap 的表,它指定了哪些字段用于 KeyField 和 DisplayField。
TableName KeyField DisplayField
--------- -------- ------------
Company CompanyId CompanyName
Location LocationId LocationName
我想传入一个表名和一个 Key 值并取回 Display 值。以下是我尝试失败的方法:
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 参数。此外,虽然我知道键是唯一的并且只有一个匹配项,但我意识到我需要一些东西来将表结果分配给 varchar。
并随时告诉我我的方法都是错误的。