我们可以从函数调用存储过程吗?

时间:2010-08-23 10:40:05

标签: sql sql-server-2005 stored-procedures

我们可以从SQL中的函数调用存储过程吗?是什么原因?

4 个答案:

答案 0 :(得分:2)

函数只能读取数据,不能更新或更改任何内容。因此,不允许函数调用存储过程。

答案 1 :(得分:2)

是。

你可以通过一些涉及openrowset的黑客来做到这一点,但不建议这样做,因为它会打开一个新的连接。

CREATE FUNCTION dbo.test ()
RETURNS  varchar(200)
AS
BEGIN
    RETURN (Select top 1 [Name] from 
OPENROWSET('SQLNCLI','Server=.\SQL2008;Trusted_Connection=yes;','SET NOCOUNT ON;SET FMTONLY OFF;EXEC MASTER..SP_HELP') 
)

END
GO

SELECT dbo.test()

答案 2 :(得分:1)

快速回答:否。

原因:存储过程不会产生任何可以在SQL中重用的输出。

答案 3 :(得分:0)

为了提高效率,函数应该是确定性的,即输出应该仅取决于输入,以便可以缓存结果。

如果要从函数调用存储过程,则必须专门使函数不确定。