SQL - 功能 - 一次使用一列 return table

SQL - function - use one column at a time which return table

我有一个 SQL 服务器功能:

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

现在在使用这个函数时,有时我只想使用这个函数的单个列,例如在存储过程中。

如果我使用此代码 - 它将 return 整个 table

declare @para float

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

如何只获取Element_DryScrapManualSurface列?

试试这个:

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

试试这个:

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

如果需要,您可能还想使用 TOP 1。

你叫错了,因为你有一个 table 值函数,它应该是:

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;

我不知道你的函数 return 是否有多个结果,但我添加了 TOP 1ORDER BY 以确保赋值是确定的,以防它 return 多行。