Hallo liebe DB-Forum Gemeinde,
ich bin gerade dabei meine ersten StoredProcedures zu schreiben, arbeite mich also gerade erst in das Thema ein...
Nun habe ich bei mehreren SP Probleme, allerdings möchte ich hier nun mit der einfachsten anfangen, vielleicht lerne ich in diesem Threat schon genug, dass ich die Fehlerbehebung bei den komplexeren SPs selber durchführen kann...
Folgende Prozedur habe ich erstellt. Diese soll lediglich die "@Linie" entgegennehmen, 2 Update-Befehle ausführen und anschließend den Eingangsparameter (@Linie) wieder zurückgeben.
USE
[Ipvks]
GO
/****** Object: StoredProcedure [dbo].[get_Linie_from_button] Script Date: 26.06.2014 15:42:22 ******/
SET
ANSI_NULLSON
GO
SET
QUOTED_IDENTIFIERON
GO
ALTER
PROCEDURE[dbo].[get_Linie_from_button]
@LinieASint
AS
BEGIN
SETNOCOUNTON;
DECLARE@update_R01LinieasNVARCHAR(MAX);
END
SET
@update_R01Linie=('UPDATE R01_Linie set Aktiv = 0 WHERE Aktiv = 1');
EXEC
sp_executesql@update_R01Linie;
SET
@update_R01Linie=('UPDATE R01_Linie set Aktiv = 1 WHERE Aktiv = @Linie');
EXEC
sp_executesql@update_R01Linie;
return
@Linie
Wenn ich die Prozedur nun ausführe (mit @Linie = 3), kommt folgende Fehlermeldung:
Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@Linie".
(1 row(s) affected)
1. Ich frage mich nun, wo soll ich die Variable (das Scalar?!
) deklarieren, sie ist doch als Eingangsparameter schon festgelegt... Oder darf ich den Eingangsparameter nicht zurückgeben?
2. Ist (in der letzten Zeile der SP) return @Linie richtig oder muss ich hier select @Linie verwenden?
3. Im 2. Update habe ich das "@Linie" mittlerweile mit in den String geschrieben. Vorher sah der Befehl so aus:
@update_R01Linie=('UPDATE R01_Linie set Aktiv = 1 WHERE Aktiv = ' + @Linie);
Allerdings hat das SQL-ManagementStudio dann immer versucht den Teil:
'UPDATE R01_Linie set Aktiv = 1 WHERE Aktiv = '
in INT zu konvertieren, ich kann mir vorstellen, dass er @Linie dazu addieren wollte???!
Vielen Dank im Voraus, hoffentlich ist der Beitrag nicht zu lang(weilig) geworden.
LG Huan90
ich bin gerade dabei meine ersten StoredProcedures zu schreiben, arbeite mich also gerade erst in das Thema ein...
Nun habe ich bei mehreren SP Probleme, allerdings möchte ich hier nun mit der einfachsten anfangen, vielleicht lerne ich in diesem Threat schon genug, dass ich die Fehlerbehebung bei den komplexeren SPs selber durchführen kann...

Folgende Prozedur habe ich erstellt. Diese soll lediglich die "@Linie" entgegennehmen, 2 Update-Befehle ausführen und anschließend den Eingangsparameter (@Linie) wieder zurückgeben.
USE
[Ipvks]
GO
/****** Object: StoredProcedure [dbo].[get_Linie_from_button] Script Date: 26.06.2014 15:42:22 ******/
SET
ANSI_NULLSON
GO
SET
QUOTED_IDENTIFIERON
GO
ALTER
PROCEDURE[dbo].[get_Linie_from_button]
@LinieASint
AS
BEGIN
SETNOCOUNTON;
DECLARE@update_R01LinieasNVARCHAR(MAX);
END
SET
@update_R01Linie=('UPDATE R01_Linie set Aktiv = 0 WHERE Aktiv = 1');
EXEC
sp_executesql@update_R01Linie;
SET
@update_R01Linie=('UPDATE R01_Linie set Aktiv = 1 WHERE Aktiv = @Linie');
EXEC
sp_executesql@update_R01Linie;
return
@Linie
Wenn ich die Prozedur nun ausführe (mit @Linie = 3), kommt folgende Fehlermeldung:
Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@Linie".
(1 row(s) affected)
1. Ich frage mich nun, wo soll ich die Variable (das Scalar?!

2. Ist (in der letzten Zeile der SP) return @Linie richtig oder muss ich hier select @Linie verwenden?
3. Im 2. Update habe ich das "@Linie" mittlerweile mit in den String geschrieben. Vorher sah der Befehl so aus:
@update_R01Linie=('UPDATE R01_Linie set Aktiv = 1 WHERE Aktiv = ' + @Linie);
Allerdings hat das SQL-ManagementStudio dann immer versucht den Teil:
'UPDATE R01_Linie set Aktiv = 1 WHERE Aktiv = '
in INT zu konvertieren, ich kann mir vorstellen, dass er @Linie dazu addieren wollte???!
Vielen Dank im Voraus, hoffentlich ist der Beitrag nicht zu lang(weilig) geworden.
LG Huan90