Нужна помощь с созданной мной SQL user_defined функцией. Моя функция должна возвращать тип элемента на основе номера элемента, который я даю. Когда я выполняю функции я получаю ошибкукак вернуть несколько значений из пользовательской функции в SQL
«Subquery вернулся более чем 1 значение. Это не допускается, когда подзапрос следующим образом: =,! =, <, < =,>,> = или когда Подзапрос используется как выражение . "
Я думаю, что я должен изменить этот тип возвращаемых функций на таблицу. Однако я не знаю, как это сделать. Здесь моя функция:
create function [dbo].[fx_calculate_type](@item varchar)
returns varchar(10)
AS
begin
DECLARE @type VARCHAR(10)
,@typeCount int
,@MaxYear int
,@redoitem varchar(18)
set @type = ''
set @typeCount = (Select count(m.year)
from mr m
where m.item_no = 'RR301') [email protected]
set @MaxYear = (Select Max(m.year)
from mr m
where m.item_no = 'RR301') [email protected]
set @redoitem = (select redoitem
from mr m
where m.item_no = 'RR301') [email protected]
if (@redoitem is null or @redoitem= '')
BEGIN
While (@typeCount>=1)
Begin
Continue
If @typeCount = 1
Begin
set @type = 'N'
--return (@type)
End
Else
Begin
set @type = @typeCount+ 'C'
set @MaxYear [email protected] -1 --2014
set @typeCount = @typeCount -1 --4
-- return (@type)
END
END
END
Else
BEGIN
While (@typeCount>=1)
Begin
Continue
If @typeCount = 1
Begin
set @type = 'N'
--return (@type)
End
Else
Begin
set @type = @typeCount+ 'R'
set @MaxYear [email protected] -1 --2014
set @typeCount = @typeCount -1 --4
--return (@type)
END
END
END
return (@type)
END
Как я могу заставить его работать?
Ваш код кажется слишком сложным для описания вы даете. Но третий 'set' с подзапросом приведет к ошибке, которую вы описываете. –
Ваша петля выглядит так, как будто вам нужна функция с табличной оценкой, это скалярная функция, см. Https://msdn.microsoft.com/en-us/library/ms186755.aspx –
Вам нужна многозначная табличная функция и вернуть таблицу назад из функции или использовать хранимую процедуру с несколькими параметрами OUTPUT (предпочтительно). Также вы используете параметр типа varchar без определенной длины, все, что нужно передать этой переменной, будет усечено до значения по умолчанию '1'. Вы должны явно определить длину этого параметра. –