Scope_inditity

Martinha

Fleissiger Benutzer
Beiträge
65
Hi,

machmal sieht man es einfach nicht...
Was ist hier syntaxmäßig falsch?
Ich möchte einfach nur einen Datensatz einfügen und den letzten Itentity-Wert zurückgeben:

ALTER PROCEDURE [dbo].[umsatz_add]
-- Add the parameters for the stored procedure here
@kontoid int
,@Betrag money
,@Buchungstext nvarchar(100)
,@UmsatzDatum date
,@umsatzart int
,@newflag bit
,@befreit bit

AS
BEGIN


-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
begin try
SET NOCOUNT ON;

-- Insert statements for procedure here

declare @new_identity int output

insert into [dbo].[umsatz] (kontoid
,betrag
,buchungstext
,umsatzdatum
,umsatzart
,newflag
,befreit)
values
(@kontoid
,@Betrag
,@Buchungstext
,@UmsatzDatum
,@umsatzart
,@befreit
,@newflag)
GO

SELECT @new_identity = SCOPE_IDENTITY()
SELECT @new_identity AS id
end try

begin catch
DECLARE @ErrorMessage NVARCHAR(MAX);
DECLARE @ErrorNumber INT;
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
DECLARE @ErrorLine INT;
DECLARE @ErrorProcedure NVARCHAR(MAX);
DECLARE @ErrorDateTime DateTime;

SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorNumber = ERROR_NUMBER(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@ErrorLine = ERROR_LINE(),
@ErrorProcedure = ERROR_PROCEDURE(),
@ErrorDateTime = GETDATE();

Insert into [dbo].[ErrorLog] (ErrorNumber, ErrorState, ErrorSeverity, ErrorLine, ErrorProcedure, ErrorMessage, ErrorDateTime)
Values (@ErrorNumber, @ErrorState, @ErrorSeverity, @ErrorLine, @ErrorProcedure, @ErrorMessage, @ErrorDateTime)

RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH;
END

Fehlermeldung:

Msg 102, Level 15, State 1, Procedure umsatz_add, Line 27 [Batch Start Line 7]
Falsche Syntax in der Nähe von "output".
Msg 102, Level 15, State 1, Procedure umsatz_add, Line 43 [Batch Start Line 7]
Falsche Syntax in der Nähe von ")".
Msg 137, Level 15, State 1, Line 53
Die @new_identity-Skalarvariable muss deklariert werden.
Msg 137, Level 15, State 2, Line 54
Die @new_identity-Skalarvariable muss deklariert werden.
Msg 102, Level 15, State 1, Line 79
Falsche Syntax in der Nähe von "CATCH".
 
Werbung:
Hi,

die Syntaxprobleme habe ich mitterweile gelöst.
Es geht mir jetzt um den Zugriff der zurück geliferten Daten in Access-VBA.
Ich habe dazu im Access-o-mania eine Frage gestellt.

Hier ist erstmal alles ok...

Guten Rutsch!
 
Nur so als Info, da Du ja dein Syntaxproblem geheim hälst, das GO hat da so überhaupt nix verloren. Das funktioniert nur und ausschließlich im Query Fenster des SSMS (geiler Genetiv). Es ist kein T-SQL Kommando.
 
Werbung:
die Stored procedure ist jetzt aber echt schlank geworden:

Sie mach einen Insert in die Umsatz Tabelle und liefert im postiv fall den neu erzeugten Pk, im Fehlerfall -1.

ALTER procedure [dbo].[umsatz_add]
-- Add the parameters for the stored procedure here
(@kontoid int
,@Betrag money
,@Buchungstext nvarchar(100)
,@UmsatzDatum date
,@umsatzart int
,@befreit bit
,@newflag bit
,@errmsg nvarchar(100) output)


AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.

begin try

SET NOCOUNT ON;

set @errmsg = ''

insert into [dbo].[umsatz] (kontoid
,betrag
,buchungstext
,umsatzdatum
,umsatzart
,newflag
,befreit)
values
(@kontoid
,@Betrag
,@Buchungstext
,@UmsatzDatum
,@umsatzart
,@befreit
,@newflag)
return SCOPE_IDENTITY()
end try

begin catch

set @errmsg = ERROR_MESSAGE();

Return -1

END CATCH;

END

Jetzt habe ich auch verstanden, wie man Returncodes und Output Parameter an Access zurück gibt.

Wer da mehr wissen möchte möge sich gerne melden.

Guten Rutsch!
 
Zurück
Oben