2017-06-19 56 views
0

我想创建这样的功能:SQL服务器 - 功能的程序

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE FUNCTION fnCalcTrimmean 
( 
    @starttime datetime, 
    @endtime datetime, 
    @percentile decimal(18, 2), 
    @platform varchar(100), 
    @stage varchar(50) 
) 
RETURNS @result TABLE 
(
    TimeResult DECIMAL(18, 2) 
) 
AS 
BEGIN 

    INSERT INTO @result 
    EXEC spCalcTrimmean @starttime, @endtime, @percentile, @platform, @stage 

    RETURN 
END 

但是当我尝试创建出现错误的函数:

Msg 443, Level 16, State 14, Procedure fnCalcTrimmean, Line 17 
Invalid use of a side-effecting operator 'INSERT EXEC' within a function. 

[更新]

  • 程序spCalcTrimmean总是返回一个值

我能做些什么来创建一个这样的功能?

谢谢:)

+1

删除函数,只需调用proc,将其结果存储在临时表中?看起来合乎逻辑... [这是一个例子](https://stackoverflow.com/q/653714/6167855) – scsimon

+0

@scsimon是的,我知道我可以做到这一点,但我需要结果到一个选择语句和程序可以不在选择内部,但函数可以 –

+0

你是什么意思“你需要结果到选择语句”。将结果存储在临时表中意味着您可以选择,连接等。听起来像[XY问题](http://xyproblem.info/) – scsimon

回答

0

道歉,因为我没有足够的信誉评论在这一点上。

如果您不能访问的程序代码,然后围绕唯一的办法就是直接执行的程序。在这种情况下,限制你直接调用它的是什么?为什么它必须是一个选择语句?