#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
Существуют ли какие-либо альтернативные способы получить тот же результат, специально используя скалярную функцию?