2010-08-23 113 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

相關問題