Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Problem mit Prozedur
Loewchen0507
myCSharp.de - Member

Avatar #avatar-2112.jpg


Dabei seit:
Beiträge: 292
Herkunft: Hamburg

Themenstarter:

Problem mit Prozedur

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Loewchen0507
myCSharp.de - Member

Avatar #avatar-2112.jpg


Dabei seit:
Beiträge: 292
Herkunft: Hamburg

Themenstarter:

ein Stückchen weiter

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Loewchen0507
myCSharp.de - Member

Avatar #avatar-2112.jpg


Dabei seit:
Beiträge: 292
Herkunft: Hamburg

Themenstarter:

return Value

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Viper78
myCSharp.de - Member



Dabei seit:
Beiträge: 162
Herkunft: Dortmund

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Viper78 am .
Das Leben ist schön!
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.860
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers