2016-03-30 12 views
0

を返し、その時点で1列を使用します。SQL - 機能 - 私は、SQL Serverの機能を持っているテーブル

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 

今、この機能を使用している間、時々私は、例えば、この関数からのみ単一の列を使用したいですストアドプロシージャ内で実行します。

私はこのコードを使用する場合 - それは唯一のElement_DryScrapManualSurface列を取得するにはどのよう

declare @para float 

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

テーブル全体を返すのだろうか?

答えて

2

あなたはそれがあるべきテーブル値関数があるので、間違ってそれを呼び出している:

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

を次に、あなたがそれから変数を割り当てることができます。

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

私はかどうかを知りませんあなたの関数は複数の結果を返しますが、複数の行を返す場合には割り当てが確定的であることを確認するためにTOP 1ORDER BYを追加しました。

0

はこれを試してみてください。

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

はこれを試してみてください。

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

あなたはまた、必要に応じてTOP 1を使用することもできます。

関連する問題