Announcement

Collapse
No announcement yet.

Strored_Procedure mit IS NULL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Strored_Procedure mit IS NULL

    Hallo zusammen,
    ich benötige Hilfe...
    Ich möchte in meiner SP folgenden Select ausführen..


    Code:
    SELECT IDS, Ergebnis, Bemerkungen FROM VorgangsStatusMe WHERE IDS = @IDS AND Ergebnis = @Ergebnis AND Bemerkungen = @Bemerkungen
    Da Ergebis und/oder Bemerkungen auch mal NULL sein können muss ich mir wohl den SELECT zusammenbauen.
    Ich habe dies wie folgt getan....


    Code:
    CREATE PROCEDURE StP_CheckResultMeasurePoint
    @IDS INT,
    @Ergebnis NVARCHAR(1000),
    @Bemerkungen NVARCHAR(1000)
    AS
    DECLARE @MyErgebnis NVARCHAR(1100)
    DECLARE @MyBemerkungen NVARCHAR(1100)
    DECLARE @SP_Exec NVARCHAR(2500)
    	
    	BEGIN
    		IF @Ergebnis = 'NULL'
    			SET @MyErgebnis = 'Ergebnis IS NULL'
    		ELSE
    			SET @MyErgebnis ='Ergebnis = ''' + @Ergebnis + ''''
    	END
    	
    	BEGIN
    		IF @Bemerkungen = 'NULL'
    			SET @MyBemerkungen = 'Bemerkungen IS NULL'
    		ELSE
    			SET @MyBemerkungen ='Bemerkungen = ''' + @Bemerkungen + ''''
    	END
    	BEGIN
    	SET @SP_Exec = 'SELECT IDS, Ergebnis, Bemerkungen FROM VorgangsStatusMe WHERE IDS = ' + CONVERT(NVARCHAR, @IDS) + ' AND ' + @MyErgebnis + ' AND ' + @MyBemerkungen
    
    --	SELECT IDS, Ergebnis, Bemerkungen FROM VorgangsStatusMe WHERE IDS = @IDS AND Ergebnis = @Ergebnis AND Bemerkungen = @Bemerkungen
    
    PRINT @MyErgebnis
    PRINT @MyBemerkungen
    PRINT @SP_Exec
    	EXEC sp_executesql @SP_Exec
    	END
    GO

    Wenn ich die Sp wie folgt aufrufe:

    Code:
    EXECUTE StP_CheckResultMeasurePoint 74, 'NULL', 'Wert'
    Bekomme ich als RETURN_VALUE = 0 obwohl ich einen Treffer haben müßte.
    Die SP funktioniert einwandfrei. Sobald ich aber NULL übergebe, also im Select Spalte IS NULL vorkommt, gehts nicht mehr.

    Wo mach ich den Fehler...???

    Schon mal Danke für eure Hilfe

  • #2
    Hallo M Merlin,

    sieht zwar gewöhnungsbedürftig, aber soweit in Ordnung aus. Bist Du sicher, das es einen Datensatz finden müsste?

    BTW, wenn Du überall NVARCHAR verwendest, dann setz besser auch immer ein N vor die String, sonst muss immer unnötig konvertiert werden

    EXECUTE StP_CheckResultMeasurePoint 74, N'NULL', 'Wert'
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Ich bin mir sicher.
      Wenn ich die Peocedure im Debugger laufen lasse und mit @SP_Exec ausgebe und diesen String im Query-Analyzer starte bekomme ich eine Zeile...

      Das ist ja das kuriose.

      Wie gesagt. sobald ich ion die Verzweigung Null, also im Select Spalte IS NULL bekomme funktioniert es nicht mehr.

      Kannst du das ebenfalls nachvollziehen....?

      Comment


      • #4
        Ich hab den Fehler gefunden. Ich habe tatsächlich keinen String NULL übergeben sondern DBNULL

        Mit der änderung der Auswertung der beiden Variablen hat`s geklappt.
        Hier das funktionierende Ergebnis:

        Code:
        CREATE Procedure StP_CheckResultMeasurePoint
        @IDS int,
        @Ergebnis nvarchar(1000),
        @Bemerkungen nvarchar(1000)
        as
        DECLARE @MyErgebnis nvarchar(1100)
        DECLARE @MyBemerkungen nvarchar(1100)
        DECLARE @SP_Exec nvarchar(2500)
        	
        	BEGIN
        		IF @Ergebnis = 'NULL' or @Ergebnis IS NULL
        			SET @MyErgebnis = 'Ergebnis IS NULL'
        		ELSE
        			SET @MyErgebnis ='Ergebnis = ''' + @Ergebnis + ''''
        	END
        	
        	BEGIN
        		IF @Bemerkungen = 'NULL' or @Bemerkungen IS NULL
        			SET @MyBemerkungen = 'Bemerkungen IS NULL'
        		ELSE
        			SET @MyBemerkungen ='Bemerkungen = ''' + @Bemerkungen + ''''
        	END
        	BEGIN
        		SET @SP_Exec =  'SELECT IDS, Ergebnis, Bemerkungen FROM VorgangsStatusMe WHERE IDS = ' + CONVERT(nvarchar, @IDS) + ' AND ' + @MyErgebnis + ' AND ' + @MyBemerkungen
        		EXEC sp_executesql @SP_Exec
        	END
        GO

        Comment

        Working...
        X