2016-03-29 166 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

正确地为我工作。你在桌上有身份专栏吗? – Harsh

+0

如果你有一个'uniqueidentifier'列,它被分配了一个默认值'NewId()',那么你会想要使用['OUTPUT'](https://msdn.microsoft.com/en-us/library/ ms177564.aspx)子句从行中获取任何数据(注意复数)新插入的行的标识列值。 '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