Выполнение динамического sql из скалярной функции

#sql #function #sp-executesql

Вопрос:

Я пытаюсь написать скалярную функцию, которая вернет текстовое значение для соответствующего идентификатора из таблицы поиска. В основном у меня есть вся информация о таблице поиска, хранящаяся в таблице, которая содержит идентификатор таблицы, имя таблицы, имя первичного ключа и имя текстового поля. Ниже приведена функция, которую я написал до сих пор, только для того, чтобы узнать, что она запрещена из-за ошибки «Только функции и некоторые расширенные хранимые процедуры могут выполняться из функции». при попытке вызвать функцию.

 CREATE FUNCTION dbo.GetLookupText( @TableNo int, @ID int )
RETURNS varchar(500)
AS
BEGIN
    DECLARE @fldPk varchar(50) = '', @fldText varchar(50) = '', @TblName varchar(70) = '', @TmpValue varchar(500) = null
    IF (ISNULL(@TableNo, -1) = -1)
        RETURN null
    SELECT @fldPk = PrimaryKey, @fldText = TextField, @TblName = TableName
        FROM metaTableNames
        WHERE (TableNo = @TableNo)
    IF (ISNULL(@fldPk, '') = '') OR (ISNULL(@fldText, '') = '') OR (ISNULL(@TblName, '') = '')
        RETURN null
    DECLARE @TmpExec nvarchar(500) = 'SELECT @TmpValue = '   @fldText   ' FROM '   @TblName   ' WHERE '   @fldPK   ' = '   CAST(@ID as varchar(30))
    EXEC sp_executesql @TmpExec, N'@TmpValue varchar(500) output', @TmpValue out

    RETURN @TmpValue
END
GO
 

Существуют ли какие-либо альтернативные способы получить тот же результат, специально используя скалярную функцию?