У меня есть некоторые проблемы с созданием динамического предложения Where
.TSQL: динамически строить строку запроса
Я хотел бы передать параметр функции, а затем использовать этот параметр для извлечения значений из базы данных и использовать это в моем предложении Where
, а затем вернуть результирующее значение.
Я пробовал множество вариантов, но мой лучший попробовать до сих пор:
CREATE FUNCTION dbo.GetID (@TaskID varchar(10))
RETURNS Int
AS
BEGIN
DECLARE @TaskType varchar(10)
DECLARE @TaskSubType TinyInt
DECLARE @ID Int
DECLARE @SQL varchar(400)
SELECT @TaskType = TaskType, @TaskSubType = TaskSubType
FROM Tasks
WHERE TaskID = @TaskID
SET @SQL = 'SELECT @ID = ID
FROM ZCircuitFaults
WHERE TaskType = @TaskType AND ' +
CASE WHEN ISNULL(@TaskSubType, '') <> ''
THEN '(TaskSubType Is Null OR TaskSubType = CAST(@TaskSubType AS Varchar))'
ELSE 'TaskSubType Is Null'
END
exec sp_executesql @SQL
, N'@ID Int, @TaskType varchar(10), @TaskSubType tinyint'
, @ID, @TaskType, @TaskSubType
, @ID = @ID OUTPUT
RETURN @ID
END
Когда я зову:
PRINT dbo.GetID('ABC123')
Я получаю ошибку:
Only functions and some extended stored procedures can be executed from within a function.
Попробуйте сделать это в хранимую процедуру. – SubqueryCrunch