2012-09-25 26 views
14

Escribí la siguiente función.Cómo devolver el valor varchar desde una función

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 

Cuando Estoy ejecutando está mostrando como resultado a. Pero el resultado esperado es adventure-works\terri0 Donde cometí el error aquí. Solo viene el primer personaje. ¿Necesitas cambiar algo?

Respuesta

11

RETURNS varchar debe ser RETURNS varchar(50).

varchar sin una longitud especificada se interpreta como varchar(1) en este contexto (y como varchar(30) en el contexto de un CAST).

BTW: Las UDF escalares que tienen acceso a datos pueden ser asesinas de rendimiento. Es posible que desee considerar, al menos, volver a escribir este as an inline TVF para que el optimizador tenga más opciones.

20

cambiar el tipo de RETURN para incluir una longitud, en este punto se acaba regresando 1 carácter:

RETURNS varchar(100) 

código completo:

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 
Cuestiones relacionadas