Как вернуть значение varchar из функции
Я написал следующую функцию.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create FUNCTION NameFunction
(
@eid int
)
RETURNS varchar
AS
BEGIN
Declare @logid varchar(50);
SELECT @logid = E.LoginId from HumanResources.Employee As E
where E.BusinessEntityID = @eid
RETURN @logid
END
GO
Когда я выполняю, он показывает результат как a
.
Но ожидаемый результат adventure-works\terri0
Где я совершил ошибку здесь. Приходит только первый персонаж. Вам нужно что-то изменить?
Ответы
Ответ 1
Измените тип RETURN
, чтобы включить длину, в этот момент он просто возвращает 1 символ:
RETURNS varchar(100)
Полный код:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create FUNCTION NameFunction
(
@eid int
)
RETURNS varchar(100) -- or whatever length you need
AS
BEGIN
Declare @logid varchar(50);
SELECT @logid = E.LoginId from HumanResources.Employee As E
where E.BusinessEntityID = @eid
RETURN @logid
END
GO
Ответ 2
RETURNS varchar
должен быть RETURNS varchar(50)
.
varchar
без указанной длины интерпретируется как varchar(1)
в этом контексте (и как varchar(30)
в контексте CAST
).
BTW: Скалярные UDF, которые делают доступ к данным, могут быть убийцами производительности. Возможно, вам стоит рассмотреть хотя бы переписывание этого в качестве встроенного TVF, чтобы оптимизатор имел больше опций.