SQL - 函数 - 一次使用一列返回表

时间:2016-03-30 08:27:56

标签: sql-server-2008 tsql sql-function

我有一个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

现在使用此功能时,有时我只想使用此功能中的单个列,例如在存储过程中。

如果我使用此代码 - 它将返回整个表

declare @para float

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

如何只获取Element_DryScrapManualSurface列?

3 个答案:

答案 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 1 AND ORDER BY以确保分配是确定性的,以防它返回多行。

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

试试这个:

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

如果需要,您也可以使用TOP 1.