2016-08-14 3 views
1

Ich brauche Hilfe, um eine gespeicherte Prozedur mit Parametern zu erstellen, wenn der Wert für diesen Parameter übergeben, dann muss es in der Datenbank einfügen oder aktualisieren, sonst es sollte einen Standardwert von Null verwenden.Einfügen und Aktualisieren der gespeicherten Prozedur mit Parametern und Standard von Null funktioniert nicht

Mein Problem ist, dass, wenn ich den Code unten mit einem SampleID = 0 ausführen, es funktioniert ... jeder andere SampleID tut nichts.

Vielen Dank im Voraus

Ausführung der gespeicherten Prozedur:

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

Stored Procedure Code:

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

Sie ein paar Probleme haben. Zwei Parameter sind int, aber Sie übergeben Varchar-Werte. Verliere beim Anrufen die Anführungszeichen um die numerischen Parameterwerte herum. Wenn Sie einen Wert ungleich null übergeben, wird das Update ausgeführt. Ich bin mir sicher, dass es vollkommen in Ordnung ist. Welches Verhalten lässt dich denken, dass es nichts tut? Was ist dein Testfall? Haben Sie beispielsweise einen vorhandenen Datensatz mit 'SamplesID = 1 ', gegen den Sie testen können? –

+0

Danke Nick, das Entfernen der Zitate hat den Trick ... der SP fügt jetzt Datensätze für Nicht-Null-IDs.danke für die Bearbeitung Code-Kopieren/Einfügen – FadielRas

+0

Ich habe keine Ahnung, wie es das macht ... es trifft nur den Einsatz Code für Werte von 0 –

Antwort

0

Zuerst müssen Sie lernen, wie eine gespeicherte Prozedur zu debuggen.
nur vorübergehend folgenden Code in der Prozedur ein:

SELECT @SamplesID, @SamplesCategoriesID, @SamplesName; 

Das ist, wie Sie richtig sicher Werte übergeben machen.

Zweitens, für Nicht-Null Fälle folgende Anweisung hinzufügen:

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

Diese Aussage nicht Null zurückkehren.

Drittens 500% sicher sein, Sie es richtig machen, durch Namen wie diese Parameter übergeben:

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