Как вернуть значение varchar из функции - программирование
Подтвердить что ты не робот

Как вернуть значение 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 Где я совершил ошибку здесь. Приходит только первый персонаж. Вам нужно что-то изменить?

4b9b3361

Ответ 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, чтобы оптимизатор имел больше опций.