2016-03-29 25 views
0

saklı prosedür doğru yeni bir satır ekler verir, ancak, her zaman çıkış parametresi için 0 döndürür. Yeni satır kimliğine ne dönecekti?SCOPE_IDENTITY() her zaman 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

benim için doğru çalışır. Tabloda kimlik sütununuz var mı? Eğer NewID 'dan varsayılan bir değer atanan' uniqueidentifier' sütun varsa – Harsh

+0

() 'o zaman [' OUTPUT'] (https://msdn.microsoft.com/en-us/library/ kullanmak isteyeyim ms177564.aspx) maddesinin (Not çoğul sıralarından herhangi bir veri alır.), mesela yeni eklenen satırlar için kimlik sütun değerleri. 'OUTPUT'' INSERT', 'UPDATE',' DELETE' ve 'MERGE' ile kullanılabilir ve UPDATE' 'durumunda _before_ ve _after_ iki değerlere ulaşabilirler edilebilir. Cebinizde sahip olmaya değer bir alet. – HABO

+1

nasıl prosedürü diyorsun? –

cevap

0

Büyük ihtimalle saklı yordamı çağıran ederken out anahtar kelime eklemek için unuttum olabilir:

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