我有一个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
列?
答案 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.