一個SQLServer的自定義函數中調用一個自定義的存儲過程,執行此函數后發出如下提示:“只有函數和擴展存儲過程才能從函數內部執行"。
原因:函數只能使用簡單的sql語句,邏輯控制語句,復雜一點的存儲過程是不能調用的,在函數里也不能使用execute sp_executesql 或者execute 。解決方法把函數改為存儲過程,然后在另一個存儲過程中象調用函數一樣使用此存儲過程就可以了。
下面是一個存儲過程調用另一個存儲過程的實例,有參數傳遞的。
--存儲過程sp_B
create proc sp_B
@A int ,
@B int ,
@C int output
AS
set @C = @A + @B
go
--存儲過程p_A
create proc sp_A
@A int ,
@B int
as
declare @C int
exec sp_B @A , @B , @C output
print @C
go
--測試
exec sp_A 3 , 5