2016-03-29 24 views
0

Die folgende gespeicherte Prozedur fügt eine neue Zeile korrekt ein aber gibt immer 0 für den Ausgabeparameter zurück. Was würde die neue Zeilen-ID zurückgeben?Scope_Identity() gibt immer 0 zurück

alter procedure DlogErr 
    @Msg varchar(100), @Cmd nvarchar(max), 
    @Stk varchar(200), @Pgm varchar(50), 
    @Lin smallint, @EID int, @UID int output 
as 
begin 
    set nocount on 

    insert into ErrorLog (Src, ErrMsg, Cmd, StackInfo, Itm, Pgm, Lin, ErrID) 
    values ('VFP', @Msg, @Cmd, @Stk, '', @Pgm, @Lin, @EID); 

    set @UID = Scope_Identity(); 
end 
+3

richtig funktioniert für mich. Hattest du eine Identitätsspalte in der Tabelle? – Harsh

+0

Wenn Sie eine 'uniqueidentifier'-Spalte haben, der ein Standardwert von' NewId() 'zugewiesen wurde, dann sollten Sie ein [' OUTPUT'] verwenden (https://msdn.microsoft.com/en-us/library/ ms177564.aspx) -Klausel zum Abrufen von Daten aus den Zeilen (Note Plural.), z Identitätsspaltenwerte für neu eingefügte Zeilen. 'OUTPUT' kann mit' INSERT', 'UPDATE',' DELETE' und 'MERGE' verwendet werden und bietet Zugriff auf _before_ und _after_ Werte im Falle von 'UPDATE'. Ein Werkzeug, das es wert ist, in der Tasche zu haben. – HABO

+1

Wie rufen Sie das Verfahren an? –

Antwort

0

Wahrscheinlich Sie vielleicht vergessen haben out Schlüsselwort anhängen, während die gespeicherte Prozedur aufrufen:

declare @varUID int 
exec DlogErr @Msg='abc', @Cmd = 'foo', @Stk ='', @Pgm = '', @Lin = 0, @EID = 0 , @UID = @varUID out 
select @varUID 
Verwandte Themen