2010-08-23 111 views

回答

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() 
1

快速回答:号

为什么:存储过程不会产生SQL内可重复使用的任何输出。

+1

有输出参数,并可以存储过程的结果插入表 – Andomar 2010-08-23 10:44:05

2

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

0

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

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

+2

几乎所有UDF的依赖于一个或多个表的内容,所以他们不是在所有 – Andomar 2010-08-23 10:46:36

+0

@Andomar确定性:一点也不。有很多UDF是确定性的。 – Guffa 2010-08-23 11:03:13

相关问题