Laden...

Problem mit Prozedur

5 Antworten
1,983 Aufrufe
Letzter Beitrag: vor 15 Jahren
Problem mit Prozedur

Hi Leute,

ich habe ein Programm geschrieben, welches auch wunderbar funktioniert. Macht verschiedene Eingaben und Änderungen in einem SQL Server. Des Weiteren habe ich dort einen Trigger und eine Prozedur laufen. So Weit so gut. Das einzige Problem dass ich noch habe ist, dass meine Prozedur einen Fehler schmeißt.

dazu folgendes:
Ich möchte dass meine Prozedur aus der 173 eine eins sieben drei macht.
Also: Prozedur Übergabewert: 173
Rückgabe Wert: eins sieben drei

Doch wenn ich die Prozedur aufrufe dann kommt immer die Fehlermeldung:
Meldung 245, Ebene 16, Status 1, Prozedur TestCase, Zeile 39
Fehler beim Konvertieren des varchar-Werts '-eins-sieben-drei' in den int-Datentyp.

Wie rufe ich die Prozedur auf:


DECLARE	@return_value varchar(50)

EXEC	@return_value = [dbo].[TestCase]
		@Text = N'173',
		@Laenge = 3

SELECT	'Return Value' = @return_value

Wie sieht meine Prozedur aus:


CREATE PROCEDURE [dbo].[TestCase] ( @Text VARCHAR(50), @Laenge INT)
AS
  DECLARE @EndErgebnis VARCHAR(50)


DECLARE @Zahl INT
DECLARE @Ergebnis VARCHAR(50)
DECLARE @Zeichen VARCHAR(50)
SET @Zahl = 1
SET @Ergebnis = ''
SET @EndErgebnis = ''
SET @Zeichen = ''
WHILE (@Zahl <=@Laenge)
BEGIN

SET @Zeichen = SUBSTRING(@text, @Zahl, 1)

SELECT
    @Zeichen = CASE
      WHEN @Zeichen = '0' THEN 'null'
      WHEN @Zeichen = '1' THEN 'eins'
      WHEN @Zeichen = '2' THEN 'zwei'
      WHEN @Zeichen = '3' THEN 'drei'
      WHEN @Zeichen = '4' THEN 'vier'
      WHEN @Zeichen = '5' THEN 'fünf'
      WHEN @Zeichen = '6' THEN 'sechs'
      WHEN @Zeichen = '7' THEN 'sieben'
      WHEN @Zeichen = '8' THEN 'acht'
      WHEN @Zeichen = '9' THEN 'neun'
  else
	'blub'
  END
  
  SET @EndErgebnis = @EndErgebnis + '-' + @Zeichen

SET @Zahl = @Zahl + 1

END
RETURN @EndErgebnis
GO

ein Stückchen weiter

Nun bekomme ich schon den Rückgabewert als Varchar, aber ich bekomme außerdem immer noch einen int.

Meine Prozedur sieht nun so aus:


ALTER PROCEDURE [dbo].[TestCase] ( @Text VARCHAR(50), @Laenge INT, @EndErgebnis varchar(50) output)
AS

DECLARE @Zahl INT
DECLARE @Ergebnis VARCHAR(50)
DECLARE @Zeichen VARCHAR(50)
SET @Zahl = 1
SET @Ergebnis = ''
SET @EndErgebnis = ''
SET @Zeichen = ''
WHILE (@Zahl <=@Laenge)
BEGIN

SET @Zeichen = SUBSTRING(@text, @Zahl, 1)

SELECT
    @Zeichen = CASE
      WHEN @Zeichen = '0' THEN 'null'
      WHEN @Zeichen = '1' THEN 'eins'
      WHEN @Zeichen = '2' THEN 'zwei'
      WHEN @Zeichen = '3' THEN 'drei'
      WHEN @Zeichen = '4' THEN 'vier'
      WHEN @Zeichen = '5' THEN 'fünf'
      WHEN @Zeichen = '6' THEN 'sechs'
      WHEN @Zeichen = '7' THEN 'sieben'
      WHEN @Zeichen = '8' THEN 'acht'
      WHEN @Zeichen = '9' THEN 'neun'
  else
	'blub'
  END
  
  SET @EndErgebnis = @EndErgebnis + '-' + @Zeichen

SET @Zahl = @Zahl + 1

END

wenn ich 173 übergebe, bekomme ich eins-sieben-drei zurück, aber außerdem auch noch die 0.
Was muss ich noch ändern, damit ich die 0 nicht mehr zurück bekomme?

Gruß Loewchen

return Value

Hi,

ist return value immer der rückgabewert, der angibt, ob die Prozedur "ohne" Fehler gelaufen ist, bzw. einen Fehlercode zurück gibt?

Gruß Loewchen

PS.: ist meine erste Prozedur die ich schreibe

hi,

du verwendest eine Procedur. Da gibt es kein RETURN.

Ausführen:

EXEC [dbo].[TestCase] @Text = N'173', @Laenge = 3

Procedur:


CREATE PROCEDURE [dbo].[TestCase] ( @Text NVARCHAR(50), @Laenge INT)
AS
DECLARE @EndErgebnis NVARCHAR(50)


DECLARE @Zahl INT
DECLARE @Ergebnis NVARCHAR(500)
DECLARE @Zeichen NCHAR(1)
DECLARE @retZeichen NVARCHAR(10)
SET @Zahl = 1
SET @Ergebnis = ''
SET @EndErgebnis = ''
SET @Zeichen = ''

WHILE (@Zahl <=@Laenge)
BEGIN

SET @Zeichen = SUBSTRING(@text, @Zahl, 1)

SELECT
@retZeichen = CASE
WHEN @Zeichen = N'0' THEN 'null'
WHEN @Zeichen = N'1' THEN 'eins'
WHEN @Zeichen = N'2' THEN 'zwei'
WHEN @Zeichen = N'3' THEN 'drei'
WHEN @Zeichen = N'4' THEN 'vier'
WHEN @Zeichen = N'5' THEN 'fünf'
WHEN @Zeichen = N'6' THEN 'sechs'
WHEN @Zeichen = N'7' THEN 'sieben'
WHEN @Zeichen = N'8' THEN 'acht'
WHEN @Zeichen = N'9' THEN 'neun'
ELSE
'blub'
END

IF len(@EndErgebnis) = 0
BEGIN
SET @EndErgebnis = @retZeichen
END
ELSE
BEGIN
SET @EndErgebnis = @EndErgebnis + '-' + @retZeichen
END


SET @Zahl = @Zahl + 1

END
SELECT @EndErgebnis as RetValue

GO


Du verarbeitest es wie ein SELECT in ADO.NET

MfG
Björn

Das Leben ist schön!

Hallo,

beachte den Unterschied zwischen Stored Procedure und Function. Siehe hierzu die Kapitel im Wikibook SQL ff.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"