stored procedure + if alternative

Dawit

Grünschnabel
möchte eine SP schreiben in der fall abhängig where klauseln verwendet werden...
das habe ich bis jetzt:

Code:
go
CREATE PROCEDURE SelectSeiteninhaltdi  (
@SNR int,
@Oberbereich nvarchar(max),
@Unterbereich nvarchar(max),
@Ebene int,
@Sprache nvarchar(5) = 'de'
)

AS
BEGIN

SELECT S_Nr,
		S_Ebene,
	    S_Oberbereich,
	    S_Unterbereich,
	    S_Obertitel,
	    S_AnleserTitel,
	    S_Anleser,
		S_Inhalte,
	   (SELECT COUNT(S_NR)
		  FROM SEITE next
		 WHERE next.S_Oberbereich = this.S_Oberbereich
		   AND next.S_Unterbereich = this.S_Unterbereich
		   AND this.S_Ebene+1 = next.S_Ebene ) AS KinderAnzahl
    FROM SEITE this 
 INNER JOIN W_SPRACHE ON W_SPRACHE.WS_NR = this.S_SPRACHE
INNER JOIN W_SEITENTYP ON this.wst_nr = W_SEITENTYP.wst_nr 

IF (@Ebene = 1 OR @Ebene = 2)
	BEGIN
		WHERE S_Oberbereich LIKE @Oberbereich
		  AND S_Ebene LIKE @Ebene+1
		IF (@Ebene = 2)
			BEGIN
				AND S_Unterbereich LIKE @Unterbereich
			END
END 
ELSE 
	BEGIN
		WHERE S_Nr = @SNR
	END
AND WS_WERT LIKE @Sprache

END
GO

als fehlermeldung beim ausführen bekomme ich dies:
Meldung 156, Ebene 15, Status 1, Prozedur SelectSeiteninhaltdi, Zeile 31
Falsche Syntax in der Nähe des 'WHERE'-Schlüsselwortes.
Meldung 156, Ebene 15, Status 1, Prozedur SelectSeiteninhaltdi, Zeile 35
Falsche Syntax in der Nähe des 'AND'-Schlüsselwortes.



hoffe mir kann wer helfen danke im vorraus
 
ok habe die lösung falls es jemanden interessiert hier die lösung:

Code:
create PROCEDURE SelectSeiteninhaltdi  (
@SNR int,
@Oberbereich nvarchar(max),
@Unterbereich nvarchar(max),
@Ebene int,
@Sprache nvarchar(5) = 'de'
)

AS
BEGIN

DECLARE @Abfrage nvarchar(max)
SET @Abfrage = 'SELECT S_Nr,
				S_Ebene,
				S_Oberbereich,
				S_Unterbereich,
				S_Obertitel,
				S_AnleserTitel,
				S_Anleser,
				S_Inhalte,
			   (SELECT COUNT(S_NR)
				  FROM SEITE next
				 WHERE next.S_Oberbereich = this.S_Oberbereich
				   AND next.S_Unterbereich = this.S_Unterbereich
				   AND this.S_Ebene+1 = next.S_Ebene ) AS KinderAnzahl
			FROM SEITE this 
		 INNER JOIN W_SPRACHE ON W_SPRACHE.WS_NR = this.S_SPRACHE
		INNER JOIN W_SEITENTYP ON this.wst_nr = W_SEITENTYP.wst_nr'

IF (@Ebene = 1 OR @Ebene = 2)
BEGIN
SET @Abfrage = @Abfrage + ' WHERE S_Oberbereich LIKE ''' + @Oberbereich + ''' AND S_Ebene =' + CAST(@Ebene AS nvarchar(5)) +'+1'
	IF (@Ebene = 2)
			BEGIN
				SET @Abfrage = @Abfrage +' AND S_Unterbereich LIKE ''' + @Unterbereich+''''
			END
END
ELSE 
		SET @Abfrage = @Abfrage +'WHERE S_Nr = ' + @SNR

SET @Abfrage = @Abfrage + ' AND WS_WERT LIKE ''' + @Sprache+''''
EXEC (@Abfrage)

END
 
Zurück