2013-11-20 196 views
1

我正在嘗試結合程序和函數來了解更多關於它們的內容。調用函數內部函數

我有一個名爲customer的表格,列數很少(我將使用的列爲sal)。

我創建了一個函數來檢查誰的工資都低於25000.如果上述情況呈現行,然後我從我的函數調用過程。

該過程更新salsal = sal + 1000)並返回rowcount。

create procedure Taxrefund2(@taxr int) as 
begin 
    update customer 
    set Balance=Balance + @taxr 

    return @@rowcount 
end 

create function taxfunc() 
as 
begin 
    declare @salary table(sal decimal(10,2)) 

    set @salary = (select sal from customer) 

    declare @x int=0 

    if @salary < 25000 
     exec @x = taxrefund2(1000) 

    return @x 

    print 'the no of customers who got tax redeemption is :' +cast(@x as varchar(10)) 

當我編譯我的功能我得到的錯誤:

消息156,級別15,狀態1,過程taxfunc,行中的關鍵字 '作爲' 近2
不正確的語法。

Msg 102,Level 15,State 1,Procedure taxfunc,Line 8
'1000'附近的語法不正確。

消息178,級別15,狀態1,過程taxfunc,第9行
帶有返回值的RETURN語句不能在此上下文中使用。

Msg 102,Level 15,State 1,Procedure taxfunc,Line 10
')'附近的語法不正確。

有人能解釋我在代碼或概念中做了什麼錯誤嗎?

+1

不能調用SQL Server用戶定義的函數內的存儲過程。而且你不能在一個函數內改變數據庫的狀態,但是你在代碼中試圖做什麼可以通過一個存儲過程來實現:) –

+0

爲什麼你有SQL Server和MySql的標籤? –

+0

[可以在用戶定義的函數中調用存儲過程嗎?]可能的重複?(http://stackoverflow.com/questions/12843788/is-it-possible-to-call-a-stored-procedure-in - 一個用戶定義的函數) –

回答

1

您不能直接從用戶定義函數調用存儲過程。

How to call a stored procedure from a user defined function In SQL Server 2000

+0

其實這不是完整的真實,有一個例外..看到我鏈接爲一個副本的帖子.. –

+0

誰downvoted。我剛剛分享了這個問題的重複。 – goofyui

+0

不是downvoter,但爲什麼重複相同的答案?並且您還有一條評論指出您的答案存在問題..並且他沒有使用SQL Server 2000 ... –