2012-10-11 54 views
3

有沒有什麼辦法可以調用多標量表值函數那樣的存儲過程?在多標量表值函數中調用存儲過程?

注:該查詢返回錯誤:

Invalid use of a side-effecting operator 'INSERT EXEC' within a function.

T-SQL代碼:

CREATE FUNCTION fnCrSum 
(
@ay nvarchar(100), @yil nvarchar(4), @tip nvarchar(25) 
) 
RETURNS 
@tablo TABLE 
(
    id int, 
    ref_num int, 
    last_name nvarchar(200), 
    grup nvarchar(200), 
    analist nvarchar(200), 
    durum nvarchar(10), 
    start_dt int , 
    end_dt int, 
    duration int, 
    type nvarchar(10), 
    bildirim nvarchar(200) 
) 
AS 
BEGIN 
    DECLARE @exec NVARCHAR(250) 
    SET @exec = 'exec dbo.spCrSum ''' + @ay + ''', ''' + @yil + ''', ''' + @tip + '''' 
    INSERT INTO @tablo 
    exec (@exec) 

    RETURN 
END 
GO 

回答

0

你不能在一個函數執行存儲過程。

2

函數不能有副作用,即改變數據。

即使你的存儲過程沒有改變任何東西,SQL編譯器也不能假設它,所以它只是不允許它。

爲什麼你需要將它包裝在一個函數中?

+0

因爲在Business Objects Designer方面存在技術問題。 – juniorDev

0

我解決了這個問題。我寫了一個包含可執行查詢的表值函數,返回表並準備存儲過程來調用該函數傳遞參數。這個對我有用。

相關問題