2016-08-14 38 views
1

我需要幫助來創建插入存儲過程的參數,如果傳遞該參數的值,那麼它必須在數據庫中插入或更新,否則它應該使用默認的零。插入和更新存儲過程的參數和默認爲零不起作用

我的問題是,當我執行下面的代碼使用SampleID = 0,它的工作原理...任何其他SampleID什麼都不做。

在此先感謝

執行存儲過程的:

SET NOCOUNT OFF 
EXEC SP_Samples '0', '3' ,'Pink' 
GO 

存儲過程的代碼:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO    

ALTER PROCEDURE [dbo].[SP_Samples] 
    (@SamplesID int, 
    @SamplesCategoriesID int, 
    @SamplesName nvarchar(50) 
    ) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF (@SamplesID = 0) 
    BEGIN 
     INSERT INTO tblSamples ([SamplesName], [SamplesCategoriesID]) 
     VALUES (@SamplesName, @SamplesCategoriesID) 
    END 
    ELSE 
    BEGIN 
     UPDATE [tblSamples] 
     SET SamplesCategoriesID = @SamplesCategoriesID, 
      SamplesName = @SamplesName 
     WHERE SamplesID = @SamplesID 
    END  
END 
+1

你有幾個問題。兩個參數是int,但你傳遞的是varchar值。調用時,在數字參數值周圍丟失雙引號。當你傳遞一個非零值時,它會運行更新。我相信它運行得很好。什麼樣的行爲讓你覺得它沒有做任何事情?你的測試案例是什麼?例如,你是否有一個可以測試的'SamplesID = 1'的現有記錄? –

+0

感謝尼克,刪除報價做了伎倆...... SP現在插入記錄非零ID's.thanks編輯代碼複製/粘貼 – FadielRas

+0

我不知道它是如何做到這一點......它只是插入插入代碼值爲0 –

回答

0

首先,你必須學會​​如何調試存儲過程。
只是暫時插入下面的代碼到你的程序:

SELECT @SamplesID, @SamplesCategoriesID, @SamplesName; 

這是你將如何確保值正確地傳遞。

其次,對於非零的情況下加下面的語句:

SELECT COUNT(*) FROM tblSamples WHERE SamplesID = @SamplesID; 

這種說法不應該返回零。

第三,爲500%肯定你正在做的是正確的,通過名稱傳遞參數是這樣的:

EXEC SP_Samples @SamplesID = 0, @SamplesCategoriesID = 3, @SamplesName = 'Pink'; 
GO 
EXEC SP_Samples @SamplesID = 1, @SamplesCategoriesID = 4, @SamplesName = 'Blue'; 
GO