如何从函数返回varchar值

Sea*_*her 19 sql-server function

我写了以下功能.

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
Run Code Online (Sandbox Code Playgroud)

当我执行它时显示结果为a.但预期的结果是adventure-works\terri0 我在这里犯了错误.只有第一个角色来了.需要改变什么?

Tar*_*ryn 25

更改您的RETURN类型以包含长度,此时它只返回1个字符:

RETURNS varchar(100)
Run Code Online (Sandbox Code Playgroud)

完整代码:

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
Run Code Online (Sandbox Code Playgroud)


Mar*_*ith 11

RETURNS varchar应该是RETURNS varchar(50).

varchar没有指定的长度被解释为varchar(1)在此上下文中(以及varchar(30)在a的上下文中CAST).

BTW:进行数据访问的标量UDF可能是性能杀手.您可能想要考虑至少将其重写为内联TVF,以便优化器具有更多选项.