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