2016-03-16 124 views
1

我遇到了這個問題,我不知道是什麼原因造成的。我的教授同樣感到困惑。存儲過程得到執行32次

create procedure getName 
    @AuthorNum decimal(2,0) 
as 
begin 
    select AUTHOR_LAST 'Last Name', AUTHOR_FIRST 'First Name' 
    from AUTHOR 
    where AUTHOR_NUM = @AuthorNum 
end 
go 

execute getName 9 

這應返回Collins Bradley。相反,它執行32次。第一次返回預期結果,但其他31次返回表中第二項的條目(如果您感興趣,則返回Soloratoff Paul

任何線索爲什麼它會執行最大次數?

回答

3

我通過查看「存儲過程」文件夾中的條目計算出來。

顯然當我執行創作時,execute getName 2已經偷偷溜進了那裏。我忘了在創建塊和執行塊之間放置一個go。當你執行一個查詢時,會發生什麼......

+2

恭喜你自己找到了解決方案!只有一個提示:如果除了讀取數據外別無其他,數據庫存儲過程並不是最好的選擇。你應該更喜歡一個*內聯*表值函數(沒有'BEGIN ... END') – Shnugo

+0

謝謝,這很好。這是一個任務的答案,所以這個問題特別要求提供 –

+3

另一個提示是,當調用帶有execute的SP時,使用命名參數。這樣,如果將來參數的順序發生變化,則不會有代碼被破壞。 –