2010-07-19 57 views
0

我有被聲明爲一個存儲過程如下:SQL 2000:存儲過程錯誤:過程或函數「名」需要參數「@參數」,但未提供

ALTER PROCEDURE dbo.thisProc 
@ID int,@TypeID int, @DocID int, @Section varchar(10) 

我需要的是能夠這樣做:

如果提供@ID,則執行一個特定的if塊 如果未提供@ID,則移動檢查是否輸入了@TypeID,然後執行另一個塊(如果有)。

我不想編寫多個sql查詢來處理用戶正在查看的不同輸入/頁面部分。

謝謝。

示例代碼:

CREATE PROCEDURE GetArticle 
    @ID int,@DoTypeID int, @DocID int, @Sec varchar(10) 
AS 
IF @ID IS NOT NULL AND , @DocID IS NOT NULL AND @Sec = 'inner' 
BEGIN 
    SELECT "my query is here" 

WHERE Articles.ID = @ID AND Articles.DocID = @DocID 

END 
ELSE IF @ID IS NULL AND @DocID IS NULL AND @Sec = 'list' 
BEGIN 
    EXEC GetDocList @DocTypeID 
END 

ELSE IF @ID IS NULL AND @DocID IS NULL AND @Sec = 'full' 
BEGIN 
EXEC GetDocList @DocTypeID 
END 
+0

如果你不想使用它並使用IF狀態,你能不能只提供ID爲-1? – NibblyPig 2010-07-19 07:19:47

+0

我不認爲這是明智的,SLC。像這樣的特殊價值觀總是以混亂結束。 @Kenyana,根據你的要求,你*正在編寫多個SQL程序,但將它們全部填充到同一個「過程」中。 – 2010-07-19 07:22:34

+0

是的Brian。我想根據提供的輸入運行多個過程。問題是輸入不必在那裏。我可能會提供3或2個變量。這可以在SP中工作,或者我必須在.cs文件中編寫代碼,然後使用say 2輸入 – Churchill 2010-07-19 07:31:29

回答

1

只要給@Id默認設置爲NULL值。例如。

@id int = null 
+0

...運行該過程,並且不要在該參數中傳遞任何值。也就是說,您不必在@id參數中傳遞空值,只是不包含它。 – 2010-07-19 09:24:06

+0

我認爲這就是他在做什麼,因此「缺少參數」錯誤信息;-) – 2010-07-19 11:06:28

相關問題