2012-09-25 101 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