2012-09-25 69 views
14

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

回答

11

RETURNS varchar应该是RETURNS varchar(50)

varchar没有指定的长度在此上下文中被解释为varchar(1)(并且在CAST的上下文中被解释为varchar(30))。

顺便说一句:做数据访问的标量UDF可能是性能杀手。您可能需要考虑至少重写此as an inline TVF,以便优化程序具有更多选项。

20

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