2016-03-29 21 views
0

次のストアドプロシージャは、新しい行を正しく挿入しますが、出力パラメータには常に0が返されます。新しい行IDを返すのは何ですか?Scope_Identity()は常に0を返します

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

。あなたはテーブルにID列を持っていましたか? – Harsh

+0

'NewId()'からデフォルト値が割り当てられた 'uniqueidentifier'カラムを持っているなら、[' OUTPUT'](https://msdn.microsoft.com/en-us/library/)を使いたいでしょう。 ms177564.aspx)句を使用して、行から任意のデータを取得します(複数の注を参照)。新しく挿入された行のID列値。 'OUTPUT'は' INSERT'、 'UPDATE'、' DELETE'、 'MERGE'と一緒に使うことができ、' UPDATE'の場合は_before_と_after_値の両方にアクセスできます。あなたのポケットに入れておく価値のあるツール。 – HABO

+1

どのように手続きを呼び出していますか? –

答えて

0

おそらくあなたは、ストアドプロシージャを呼び出し中outキーワードを追加するのを忘れている場合があります:私のために正しく作品

declare @varUID int 
exec DlogErr @Msg='abc', @Cmd = 'foo', @Stk ='', @Pgm = '', @Lin = 0, @EID = 0 , @UID = @varUID out 
select @varUID 
関連する問題