2010-09-09 44 views
3

我有一個數據庫事情的問題。存儲的Proc必須用3或4個參數調用。如果沒有給出ImageID,那麼它必須 進入If循環並執行。如果給出ImageID,則執行存儲過程的else部分。但我不知道這是爲什麼顯示 過程或函數「」期望參數「@ImageID」,但未提供。」過程或函數「」期望參數'',這是不提供的

由於提前

if (!hasImage) 
{ 
    parameters = new SqlParameter[] 
    { 
     new SqlParameter("@LocationID", LocationID), 
     new SqlParameter("@PrimaryID", 
      Convert.ToInt32(CategoryList[i].ToString().Split(',')[0])), 
     new SqlParameter("@SecondaryID", 
      Convert.ToInt32(CategoryList[i].ToString().Split(',')[1])) 
    }; 

    SqlHelper.ExecuteNonQuery(
     DbConnString, 
     System.Data.CommandType.StoredProcedure, 
     "TempUpdateMerchantCategories_Insert", 
     parameters); 
} 
else 
{ 
    parameters = new SqlParameter[] 
    { 
     new SqlParameter("@LocationID", LocationID), 
     new SqlParameter("@PrimaryID", 
      Convert.ToInt32(CategoryList[i].ToString().Split(',')[0])), 
     new SqlParameter("@SecondaryID", 
      Convert.ToInt32(CategoryList[i].ToString().Split(',')[1])), 
     new SqlParameter("@ImageID", 
      Convert.ToInt64(ImageData[j].ToString().Split(',')[0])) 
    }; 
    SqlHelper.ExecuteNonQuery(
     DbConnString, 
     System.Data.CommandType.StoredProcedure, 
     "TempUpdateMerchantCategories_Insert", 
     parameters);  
} 

存儲的過程是這樣的。

CREATE PROCEDURE [dbo].[TempUpdateMerchantCategories_Insert] 
(
@LocationID BIGINT, 
@PrimaryID INT, 
@SecondaryID INT, 
@ImageID BIGINT) 

AS 
BEGIN 

if (@ImageID is null) 

BEGIN 
SET NOCOUNT ON; 

INSERT INTO TempMerchant_Location_Category(

LocationID, 
PrimaryID, 
SecondaryID) 

VALUES (
@LocationID, 
@PrimaryID, 
@SecondaryID) 

END 

ELSE 

BEGIN 
SET NOCOUNT ON; 

INSERT INTO TempMerchant_Location_Category( 
LocationID, 
PrimaryID, 
SecondaryID, 
ImageID) 

VALUES(
@LocationID, 
@PrimaryID, 
@SecondaryID, 
@ImageID) 

END 
END 
+0

令人驚歎!多於1個答案。謝謝大家! – Ram 2010-09-09 13:13:47

回答

9

創建PROC這樣在這種情況下

CREATE PROCEDURE [dbo].[TempUpdateMerchantCategories_Insert] 
(@LocationID BIGINT, 
@PrimaryID INT, 
@SecondaryID INT, 
@ImageID BIGINT = null) 

這將使圖像標識的可選參數

0

良好,沒有默認值,預計一些價值

CREATE PROCEDURE [dbo].[TempUpdateMerchantCategories_Insert] (@LocationID BIGINT, @PrimaryID INT, @SecondaryID INT, @ImageID BIGINT = null) 
0

你必須通過代碼@ImageID參數,否則你可以在你的存儲過程中有默認值@ImageID。

like @ImageID BIGINT = null

相關問題