2012-09-25 13 views
14

मैंने निम्न फ़ंक्शन लिखा है।फ़ंक्शन से वर्कर वैल्यू कैसे वापस करें

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 varcharRETURNS varchar(50) होना चाहिए।

varchar लंबाई निर्दिष्ट के बिना इस संदर्भ में varchar(1) के रूप में व्याख्या (और varchar(30) के रूप में एक CAST के संदर्भ में) कर रहा है।

बीटीडब्ल्यू: डेटा एक्सेस करने वाले स्केलर यूडीएफ प्रदर्शन हत्यारों हो सकते हैं। आप कम से कम इस 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 
संबंधित मुद्दे