如何从函数返回varchar值

时间:2012-09-25 10:28:58

标签: 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

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

2 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:11)

RETURNS varchar应为RETURNS varchar(50)

没有指定长度的

varchar在此上下文中被解释为varchar(1)(在varchar(30)的上下文中被解释为CAST

BTW:进行数据访问的标量UDF可能是性能杀手。您可能要考虑至少重写此as an inline TVF,以便优化器有更多选项。