Laden...

Problem mit Prozedur

Erstellt von Loewchen0507 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.790 Views
Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 13 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

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 13 Jahren
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

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 13 Jahren
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

V
162 Beiträge seit 2010
vor 13 Jahren

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!

6.911 Beiträge seit 2009
vor 13 Jahren

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!"