如何从函数返回 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-worksterri0 我在这里犯了错误。只有第一个角色来了。需要改变什么吗?

更改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

RETURNS varchar应该RETURNS varchar(50)

未指定长度varchar在此上下文中解释为varchar(1)(在CAST上下文中解释为varchar(30))。

顺便说一句:执行数据访问的标量 UDF 可能是性能杀手。您可能需要考虑至少将其重写为内联 TVF,以便优化器有更多选择。

最新更新