2013-06-18 182 views
1

在測試中看到了這一點 - 我的SQL體驗是基本的CRUD相關的,我不確定這是什麼意圖,如果有的話?TSQL存儲過程廢話

CREATE PROCEDURE [dbo].[uspGetAccountID] 
(
     @AccountID int = 1 
) 
AS 
     SELECT @AccountID 
GO 

如果程序調用如下,爲什麼會輸出?

exec dbo.uspGetAccountID 5

+2

其結果將是5 @AccountID INT = 1設置一個默認值。所以,如果你運行你的proc與5將返回5. –

+0

確實有這個過程的廢話,但它可能用來有意義的變化發生之前,使它在目前的狀態。 –

+0

這對我來說是顯而易見的答案,但我在Management Studio中運行它,它返回0.更大的問題就成爲了這樣一個聲明的意圖。 –

回答

0

其結果將是5.

上參數的默認值是否已經提供任何值只分配。

您可以使用可選參數 指定可選參數的默認值來創建存儲過程。當執行存儲的 過程時,如果未指定其他值 ,則使用默認值。

MSDN Article

0

看起來像一個測試存儲過程。它需要一個名爲@AccountID的參數,默認值爲1

exec dbo.uspGetAccountID 5 

會導致5被選中。

0
exec [dbo].[uspGetAccountID] 
-- should result in 1 
exec [dbo].[uspGetAccountID] 5 
-- should result in 5 
4

零不是代碼的結果,它是return value

SSMS實際上產生這種

USE [MyDB] 
GO 

DECLARE @return_value int 

EXEC @return_value = [dbo].[uspGetAccountID] 
     @AccountID = 5 

SELECT 'Return Value' = @return_value 

GO 

所以,你將不得不2個的結果集。一個代碼,一個用於返回代碼

在程序中添加RETURN 42的代碼SELECT後,您將獲得第二個結果42 ...

+0

謝謝。我認爲這是一個愚蠢的小事,或者看着我不知道的一些微妙之處。 –