2016-03-30 18 views
0

dönmek her seferinde bir sütun kullanın:SQL - - fonksiyon bir SQL Server fonksiyonu var tablo

ALTER FUNCTION [dbo].[Element_DryScrapManualSurface] 
(
    @Start_date datetime, 
    @End_date datetime, 
    @codeusine varchar(10), 
    @codeatelier varchar(10), 
    @ligne varchar(10), 
    @Trialcheck bit 
) 
RETURNS @Result TABLE (Element_DryScrapManualSurface float, 
         Element_DryScrapManualBoards float) 
AS 
BEGIN 
    insert into @Result 
     select * from table_x 

    select * from @Result 
END 
Bu işlevi kullanırken

Şimdi, bazen bu işlevin, örneğin yalnızca tek bir sütun kullanmak istiyorum saklı bir prosedürde.

Bu kodu kullanırsanız - Ne kadar yalnızca Element_DryScrapManualSurface sütun almak için bütün tabloyu

declare @para float 

set @para = isnull((select dbo.[Element_DryScrapManualSurface](@Start_date,@End_date,@codeusine,@codeatelier,@ligne,@Trialcheck)),0) 

dönecek?

cevap

2

Sen işlevini değerli bir tablo var çünkü olması gerektiği, yanlış aradığınız:

SELECT Element_DryScrapManualSurface, 
     Element_DryScrapManualBoards 
FROM dbo.Element_DryScrapManualSurface (@Start_date,@End_date,@codeusine,@codeatelier,@ligne,@Trialcheck); 

Sonra ondan bir değişken atayabilirsiniz:

SELECT TOP 1 @para = Element_DryScrapManualSurface 
FROM dbo.Element_DryScrapManualSurface (@Start_date,@End_date,@codeusine,@codeatelier,@ligne,@Trialcheck) 
ORDER BY Element_DryScrapManualSurface; 

ben bilmiyorum İşleviniz çoktan sonuç döndürür, ancak birden çok satır döndürdüğünde atamanın deterministik olduğundan emin olmak için TOP 1 AND ORDER BY ekledim.

0

bu deneyin:

set @para = isnull((select top 1 Element_DryScrapManualBoards FROM dbo.[Element_DryScrapManualSurface](@Start_date,@End_date,@codeusine,@codeatelier,@ligne,@Trialcheck)),0) 
0

bu deneyin:

with cte1 as (
select dbo.[Element_DryScrapManualSurface](@Start_date 
     ,@End_date,@codeusine,@codeatelier,@ligne,@Trialcheck)),0) 
) 
select @para = *yourfieldname* 
from cte1 

ayrıca gerekirse TOP 1 kullanmak isteyebilirsiniz.