2012-09-25 14 views
14

Napisałem następującą funkcję.Jak zwrócić wartość varchar z funkcji

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 

Kiedy jestem wykonujący to pokazano wynik jako a. Ale oczekiwany wynik to adventure-works\terri0 Gdzie popełniłem błąd tutaj. Nadchodzi tylko pierwsza postać. Chcesz coś zmienić?

Odpowiedz

11

RETURNS varchar powinien być RETURNS varchar(50).

varchar bez zadanej długości jest interpretowane jako varchar(1) w związku (oraz varchar(30) w kontekście CAST).

Przy okazji: UDF skalarne, które umożliwiają dostęp do danych, mogą być zabójcami wydajności. Możesz rozważyć przynajmniej przepisanie tego as an inline TVF, aby optymalizator miał więcej opcji.

20

Zmień typ RETURN obejmować długość, w tym momencie jest po prostu powrót 1 znak:

RETURNS varchar(100) 

Pełny kod:

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 
Powiązane problemy